1

これはThiado de Arrudaが投稿した質問のフォローアップです。つまり、generic.xaml ファイルに DataTemplate を含めたいと考えていましたが、テンプレートが適用されていませんでした。

与えられた答えは、彼のカスタム型をホストするコントロールの ControlTemplate.Resources に DataTemplate を配置することを提案しました。これは非常にうまく機能しますが、DataTemplate をホスト コントロール内だけでなく他の場所にも適用する必要があるとします。DataTemplate を他のすべてのホスト コントロールの ControlTemplates にコピーする必要がありますか?

編集(質問を言い換える):

MVVM 設計原則を使用して WPF アプリケーションを開発しています。 MainWindow.xamlには UI の構造が含まれており、すべてのスタイリングはThemes\generic.xamlにコーディングされています。(動作は別のビュー モデル クラスでコード化されていますが、それは無関係です。) UI の一部として、( ) のサブクラスを作成して、自分で作成した通常の .Net オブジェクトのコレクションListBox( ) を表示します。 プロパティを再定義するgeneric.xamlのスタイルがあり、期待どおりに適用されます。generic.xamlにもforがありますが、これは適用されません。上記のリンクによると、のコレクションに配置する必要がありますMyListBoxSubClassMyObjectMyListBoxSubClassTemplateDataTemplateMyObjectDataTemplateResourcesControlTemplateMyListBoxSubClassこれが適用されるためにDataTemplate。これは素晴らしく機能します。

私の質問は、を複製せずにアプリケーションのどこDataTemplateにでも適用する方法です。にキーを追加して必要な場所で参照しようとしましたが、何らかの理由で実行時に XAML 解析エラーが発生し、Resharper はキーを解決できないと言います。MyObject DataTemplateDataTemplateDataTemplate

4

1 に答える 1

0

別のXAMLファイルの別のリソースディクショナリにデータテンプレートを追加します。

XAMLファイルをgeneric.xamlコントロールテンプレートリソースに取り込みます。

<ControlTemplate ...>
    <ControlTemplate.Resources>
         <ResourceDictionary>
              <ResourceDictionary.MergedDictionaries>
                   <ResourceDictionary Source="wherever.xaml" />
              </ResourceDictionary.MergedDictionaries>
         </ResourceDictionary>
    </ControlTemplate.Resources>
</ControlTemplate>

次に、このデータテンプレートを使用する他の場所で、ユーザーコントロール、ウィンドウ、別のコントロールテンプレートなど、必要な場所のリソースのマージされたディクショナリにデータを取り込むことができます。

<Window x:Name="someWindow">
    <Window.Resources>
         <ResourceDictionary>
              <ResourceDictionary.MergedDictionaries>
                   <ResourceDictionary Source="wherever.xaml" />
              </ResourceDictionary.MergedDictionaries>
         </ResourceDictionary>
    </Window.Resources>
</Window>

お役に立てれば。

于 2012-11-20T16:58:49.040 に答える