web-dev-qa-db-ja.com

複数のXamlファイル間でのWPFインターフェイスの分割

XAMLを使用してユーザーインターフェイスを作成しようとしています。ただし、ファイルはすぐに非常に大きくなり、操作が困難になります。複数のファイルに分割する最良の方法は何ですか。

ComboBoxなどの要素のコンテンツを、異なるxamlファイル(ただし同じVSプロジェクト内)で定義されている要素に設定できるようにしたいと考えています。

ありがとう

46
Dave Turvey

UserControlを定義することにより、大きなユーザーインターフェイスを分割できます。

ソリューションツリーを右クリックし、[追加]、[新しいアイテム...]、[ユーザーコントロール]の順に選択します。これは通常の方法で設計できます。

その後、名前空間宣言を使用してXAMLでユーザーコントロールを参照できます。 UserControlをウィンドウに含めたいとしましょう。次の例では、名前空間 "YourCompany.Controls"に "Foo"という名前のUserControlを追加しました。

<Window x:Class="YourCompany.MainWindow"
    xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
    xmlns:Controls="clr-namespace:YourCompany.Controls">

  <Controls:Foo ... />

特定の例では、ユーザーコントロール内のデータを表示するDataTemplateを定義することにより、コンボボックスでユーザーコントロールを利用します。

40
stusmith

ResourceDictionary を使用して、XAMLファイルを分割できます。 ResourceDictionaryを使用して、他のファイルをマージできます。

<Page.Resources>
  <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
      <ResourceDictionary Source="myresourcedictionary.xaml"/>
      <ResourceDictionary Source="myresourcedictionary2.xaml"/>
    </ResourceDictionary.MergedDictionaries>
  </ResourceDictionary>
</Page.Resources>

ResourceDictionaryでは、メインのXAMLファイルが小さくなるように、要素で使用できるスタイルを宣言することもできます。

小さいXAMLファイルを取得する別の可能性は、メインアプリで使用する独自のコントロールを定義することです。

23
EFrank

UserControlの代わりに Page を作成することもできます。 Pageは、Windowまたは Frame によってホストできます。ページとユーザーコントロールの長所と短所を検索します。それはあなたのニーズに最もよく合うナビゲーションに関してあなたの要件に少し依存します。

これはフレームでページを使用する例です。

1
Mike de Klerk