イベント ハンドラーをアタッチするか、"Name" または "x:Name" 属性を使用してコードから UI 要素にアクセスするかによって異なります。
素敵な純粋な MVVM アプリケーション
最初に、バインディングとコマンドのみを使用する適切な純粋な MVVM アプリケーションがあり、名前付き UI 要素やコード ビハインド イベント ハンドラーを使用していないと仮定します。よかった: きれいなアプリケーション アーキテクチャをお持ちで、気に入っています。
その場合、x:Class 属性を削除して XAML ファイルの一時コピーを作成し、次を呼び出すだけです。
Application.LoadComponent(this, uriToTemporaryCopy);
醜く不純な非 MVVM アプリケーション
ここで、コード ビハインド (いたずら、いたずら、いたずら!) から x:Name または Name で名前が付けられた要素を使用したか、XAML を使用してイベント ハンドラーをアタッチしたとします (いたずらではありませんが、純粋ではありません)。あなたの建築はきれいではありませんが、それでも私はあなたが好きです。
この場合、これらの設定にはコード ビハインドとの統合が必要なため、Application.LoadComponent だけではうまくいきません。また、BAML コンパイラを呼び出す方法も見つける必要があります。
分離コードの統合はすでに Page または UserControl サブクラスにコンパイルされているため、いくつかの制限があります。
- イベント ハンドラの割り当ての順序を追加、削除、または変更することはできません
- 名前付き要素の名前またはシーケンスを変更したり、名前付き要素を追加したりすることはできません
これらの規則を順守する場合、通常、クラスに組み込まれる生成されたコードは変更されないため、実行中のアプリケーションに新しい XAML ファイルを読み込むことができます。
手順は次のとおりです。
- XAML ファイルを BAML にコンパイルするには、A) 含まれているプロジェクトをビルドする、B) 一時的なプロジェクトを作成してコンパイルする、または C) PresentationBuildTasks でマークアップ コンパイラ タスクを直接呼び出す、のいずれかを行います。
- 純粋なソリューションで編集した XAML ファイルに対して行ったのと同じように、Application.LoadComponent を使用して BAML ファイルを読み込みます。
コンパイル済みの .csproj プロジェクトでは、コンパイル済みの BAML ファイルはすべて、拡張子が .baml の obj/debug または obj/release ディレクトリの下にあります。マークアップ コンパイラ タスクを直接呼び出すと、出力場所を決定できます。
.BAML ファイルとは?
ご存じない方のために説明すると、BAML は基本的に XAML の圧縮および最適化されたバイナリ形式であり、XAML が .exe または .dll 内に格納される方法です。XAML にはない、生成されたコードに直接リンクする機能もあります。