1

実行時に XAML ファイルを解析し、ページ グリッドに挿入できる UIElement を作成できることはわかっていますが、問題はありません。

しかし、私が本当に望んでいるのは、自分のページまたはユーザー コントロールの XAML 全体を置き換えることです。それも可能ですか?

理由:

アプリケーションのユーザーに、アプリケーションを実行する機会を与えたい (起動には時間がかかります。これは、いくつかのレガシーの問題のために短縮できません)。Blend で「ctrl + s」でビューを更新するだけです。

4

1 に答える 1

3

イベント ハンドラーをアタッチするか、"Name" または "x:Name" 属性を使用してコードから UI 要素にアクセスするかによって異なります。

素敵な純粋な MVVM アプリケーション

最初に、バインディングとコマンドのみを使用する適切な純粋な MVVM アプリケーションがあり、名前付き UI 要素やコード ビハインド イベント ハンドラーを使用していないと仮定します。よかった: きれいなアプリケーション アーキテクチャをお持ちで、気に入っています。

その場合、x:Class 属性を削除して XAML ファイルの一時コピーを作成し、次を呼び出すだけです。

 Application.LoadComponent(this, uriToTemporaryCopy);

醜く不純な非 MVVM アプリケーション

ここで、コード ビハインド (いたずら、いたずら、いたずら!) から x:Name または Name で名前が付けられた要素を使用したか、XAML を使用してイベント ハンドラーをアタッチしたとします (いたずらではありませんが、純粋ではありません)。あなたの建築はきれいではありませんが、それでも私はあなたが好きです。

この場合、これらの設定にはコード ビハインドとの統合が必要なため、Application.LoadComponent だけではうまくいきません。また、BAML コンパイラを呼び出す方法も見つける必要があります。

分離コードの統合はすでに Page または UserControl サブクラスにコンパイルされているため、いくつかの制限があります。

  1. イベント ハンドラの割り当ての順序を追加、削除、または変更することはできません
  2. 名前付き要素の名前またはシーケンスを変更したり、名前付き要素を追加したりすることはできません

これらの規則を順守する場合、通常、クラスに組み込まれる生成されたコードは変更されないため、実行中のアプリケーションに新しい XAML ファイルを読み込むことができます。

手順は次のとおりです。

  1. XAML ファイルを BAML にコンパイルするには、A) 含まれているプロジェクトをビルドする、B) 一時的なプロジェクトを作成してコンパイルする、または C) PresentationBuildTasks でマークアップ コンパイラ タスクを直接呼び出す、のいずれかを行います。
  2. 純粋なソリューションで編集した XAML ファイルに対して行ったのと同じように、Application.LoadComponent を使用して BAML ファイルを読み込みます。

コンパイル済みの .csproj プロジェクトでは、コンパイル済みの BAML ファイルはすべて、拡張子が .baml の obj/debug または obj/release ディレクトリの下にあります。マークアップ コンパイラ タスクを直接呼び出すと、出力場所を決定できます。

.BAML ファイルとは?

ご存じない方のために説明すると、BAML は基本的に XAML の圧縮および最適化されたバイナリ形式であり、XAML が .exe または .dll 内に格納される方法です。XAML にはない、生成されたコードに直接リンクする機能もあります。

于 2010-06-24T07:03:33.757 に答える