rksoftware

Visual Studio とか C# とかが好きです

.NET Core 3 の WPF でもデザイナをあきらめない(ViewModel/SharedProject)

以前に .NET Core 3 の WPF でデザイナを使うために、XAML ファイルを .NetFramework プロジェクトで開くという力強い記事を書きました。 ViewModel は .NET Standard クラスライブラリを作るとスマートというスマートな記事も書きました。 その続編です。

■ .NET Core プロジェクトに ViewModel を追加したい。

.NET Core と .NET Standard では、使える API に差がありますし、あまりないと思いますが場合によっては手間をかけずに一つの .exe として出力したいなど、特殊な要求もあるかもしれません。

そこで、SharedProject(共有プロジェクト)です。

■ 共有プロジェクトの作成

  1. 共有プロジェクトは 共有プロジェクト で作成します。
    f:id:rksoftware:20190324171908j:plain
  2. デザイナで SharedProject に作った ViewModel が見えています。
    f:id:rksoftware:20190324171927j:plain

■ ViewModel より先の Model など

しかし、完璧に見えたこの方法もここで大きな問題に当たります。
f:id:rksoftware:20190324172005j:plain

Model クラスを .NET Core プロジェクトに作った場合、.NET Framework プロジェクトでエラーが出てしまいます。Model クラスも SharedProject に置けば解決しますが、そうするのならばできれば .NET Standard クラスライブラリで作りたいところです。

■ プリプロセッサ ディレクティブ

そこで、プリプロセッサ ディレクティブです。
ViewModel の中の Model に依存する部分を .NET Core プロジェクトでの有効にしてしまいましょう。
f:id:rksoftware:20190324172035j:plain
f:id:rksoftware:20190324172050j:plain

■ 動作

デザイナも使えるし、ViewModel も使えるしいい感じにできました。やはり SharedProject ですね。
f:id:rksoftware:20190324153117j:plain

□ .NET Core 3 の WPF でもデザイナをあきらめない記事シリーズの目次

.NET Core 3 の WPF でもデザイナをあきらめない(ViewModel/.NET Standard)

以前に .NET Core 3 の WPF でデザイナを使うために、XAML ファイルを .NET Framework プロジェクトで開くという力強い記事を書きました。
その続編です。

■ ViewModel はどうするか?

■ 普通に .NET Core プロジェクトに ViewModel を追加してみます。

  1. プロジェクトに MainWindowViewModel クラスを追加。
  2. XAML に xmlns:vm="clr-namespace:WpfAppNetCore" を追加。(WpfAppNetCore はネームスペース)
  3. DataContractMainWindowViewModel クラスを設定。
<Window.DataContext>
    <vm:MainWindowViewModel/>
</Window.DataContext>

■ エラー

.NET Framework プロジェクトでエラーが出ます。.NET Framework プロジェクトからは MainWindowViewModel クラスは見えないので言われてみれば当然ですね。
f:id:rksoftware:20190324163110j:plain

■ プロジェクト参照(失敗)

見えないなら参照してしまえと、.NET Framework プロジェクトから .NET Core プロジェクトの参照を試みると

f:id:rksoftware:20190324163132j:plain

プロジェクト '..\WpfAppNetCore\WpfAppNetCore.csproj' は 'netcoreapp3.0' を対象にしています。'.NETFramework,Version=v4.7.2' を対象とするプロジェクトからは参照できません。
WpfAppNetFramework

言われてみれば当然ですね。

■ .NET Standard

見えないなら、ViewModel クラスを .NET Core、.NET Framework のどちらでも参照できるクラスライブラリプロジェクトに入れてしまいましょう。
f:id:rksoftware:20190324163358j:plain

※ XAML の xmlns:vm="clr-namespace:WpfAppNetCore"xmlns:vm="clr-namespace:ClassLibraryNetStandard;assembly=ClassLibraryNetStandard" に書き換えました。(WpfAppNetCore/ClassLibraryNetStandard はネームスペース)

■ 動作

デザイナも使えるし、ViewModel も使えるしいい感じにできました。やはり .NET Standard ですね。
f:id:rksoftware:20190324153117j:plain

□ .NET Core 3 の WPF でもデザイナをあきらめない記事シリーズの目次

.NET Core 3 の WPF でもデザイナをあきらめない(基本)

プレビューですが、.NET Core で動作する WPF アプリが作れるようになっています。
しかし、画面デザイナがありません。
※日頃の行いの良い方の Visual Studio 2019 RC にはデザイナがあるのかもしれませんが少なくとも私の Visual Studio 2019 RC にはありません。

あきらめてエア XAML をしている方が多いと思いますが、あきらめずにチャレンジしてみます。

■ 基本

.NET Core デスクトップでデザイナを使うための基本方針ですが、XAML ファイルを .NET Framework プロジェクトで編集します。

  1. ソリューション内に WPF(.NET Core) プロジェクトと WPF(.NET Framework)プロジェクトを作ります。
  2. .NET Frameworkプロジェクトから XAML を削除します。
  3. .NET Framework プロジェクトの右クリック 追加 > 既存の項目 で .NET Core プロジェクトの XAML を リンクとして追加 します。
    f:id:rksoftware:20190324153156j:plain
  4. 一つの XAML ファイルを二つのプロジェクトで共有できたので、.NET Framework 側の XAML をダブルクリックするとデザイナが開きます。
    f:id:rksoftware:20190324153134j:plain
  5. XAML を編集します。
    f:id:rksoftware:20190324153134j:plain

■ 動作

.NET Core プロジェクトを実行すると、編集した画面で実行されます。
f:id:rksoftware:20190324153117j:plain

□ .NET Core 3 の WPF でもデザイナをあきらめない記事シリーズの目次

Android Emulator がチカチカして動かない

最近、Windows デスクトップアプリ関連の動きが多く、あまりザマれていない日々が続いていました。
(※ ザマる:Xamarin する。あまり言いません )
先日久しぶりに MacBook Pro 上の Parallales 上の Windows 上の Android エミュレータ(Visual Studio Emulator for Android)を実行すると、エミュレータの画面が明滅するだけで動作しないという事態に遭遇しました。

■ 対処

今回は次の手順で復旧しました。

  1. 該当のデバイスを削除
    Visual Studio 2017 の メニュー > ツール > Visual Studio Emulator for Android

    該当のデバイスのごみ箱アイコンで削除します。
    f:id:rksoftware:20190324143840j:plain
  2. デバイスのインストール
    該当のデバイスの↓アイコンでインストールします。
    f:id:rksoftware:20190324143840j:plain
  3. 互換性の構成
    このままでも動作しないことは無いですが、動作の遅さです。
    Hyper-V マネージャー を起動し、デバイスの設定を変更します。

    プロセッサ バージョンが異なる物理コンピューターへ移行する を ON にします。
    f:id:rksoftware:20190324143943j:plain

■ 復活

今回はこれでチカチカから復活しました。
f:id:rksoftware:20190324144003j:plain
しかし、Visual Studio Emulator for Android ももう古いので新しいエミュレーターに移行したいです。
MacBook Pro 上の Parallales 上の Windows 上で現行世代のエミュレーター動かす方法知っている方こっそり教えてください。

JXUG Xamarin もくもく会 東京 3月 を開催しました

JXUG Xamarin もくもく会 東京 3月 を開催しました。 私が主催するものとしては半年ぶりです。

今回は、非常に素晴らしい会場を提供いただき良いもくもくができたと思います。私も私物マシンでは久しぶりだったので環境周りの見直しですが進捗がでました。

これからはまたぼちぼちまた開催して行きたいと思っています。会場をお貸しいただける心優しいお方も大募集です。

Xamarin はわりといい場合もたまにはあるぞ

城東.NET #30 勉強会を開催しました。

■ 城東.NET

城東.NET #30 を開催しました。

城東.NET は東京の最近は秋葉原で毎月第3水曜日に開催している .NET 系の勉強会です。
発表を中心として、発表でなくとも最近やった事や新しい情報などを参加者で共有している会です。

f:id:rksoftware:20190322020536j:plain

今月の発表は、WPF (.NET Core) と GTK# の発表となりました。

私は WPF .NET Core でも XAML デザイナをあきらめない というタイトルで話をしました。

XAML デザイナというより、プロジェクト間でソースファイルを共有する方法についての内容になりました。

■ 次回予定

来月は 04月17日(水)に開催の予定です。

.NET に関心のある方、是非遊びに来てください。

エクセルスクショエビデンスを快適に。Excel 達人の技!

エクセルスクショエビデンス。それは闇の儀式です。
多くは語りませんが、何のことか思い当たる方、やったことがあるむしろ今まさにやっている方もいらっしゃるかもしれません。

それが幸か不幸かはここでは語りませんが、少し効率化できるかもしれない技を紹介します。
めざせ定時退社!

■ よくやるやり方

  1. システムの画面を操作します。
  2. Alt+PrintScreen キーを押下(おうか)します。
  3. Excel にフォーカスを移します。
  4. Ctrl+v を押下します。

■ 快適化技

  1. システムの画面を操作します。
  2. Excel にフォーカスを移します。
  3. 図 > スクリーンショット > 使用できるウィンドウ でシステムの画面を選択します。

f:id:rksoftware:20190319194453j:plain

スクリーンショットが張り付きます。

f:id:rksoftware:20190319194525j:plain

定時退社はホワイト企業の義務です。