リソースディクショナリ内DataTemplatesがapp.xamlのスタイルを継承しませんか?
-
12-09-2019 - |
質問
私がapp.xamlにカスタムという名前のスタイルを追加しました。
私は(私がapp.xamlのマージされた辞書に添付)外部リソースディクショナリを作成し、私はrcource辞書に上記の名前のスタイルのいずれかを使用しようとすると、それはそのようなスタイルが存在しないことを言います。
また、デフォルトのスタイル(アプリケーション全体に適用され、すなわち無名のスタイルは)テンプレート要素には適用されません。
注:テンプレートのビルドアクションは 'ページ' であるの
。 <時間>ここに私のコードの記述方法の例があります:
<Application x:Class="Application"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
ShutdownMode="OnExplicitShutdown">
<Application.Resources>
<ResourceDictionary>
<Style
x:Key="StackPanelStyle"
TargetType="StackPanel"
BasedOn="{StaticResource {x:Type StackPanel}}">
<Setter Property="Margin" Value="5"/>
<Setter Property="Orientation" Value="Horizontal" />
<Setter Property="Height" Value="40"/>
</Style>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Templates/DataTemplate1.xaml"/>
<ResourceDictionary Source="/Templates/DataTemplate2.xaml"/>
<ResourceDictionary Source="/Templates/DataTemplate3.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
<時間>
このデータテンプレートの例:
<DataTemplate DataType="{x:Type Entity}" x:Key="NameDataTemplate">
<Expander>
<StackPanel>
<--The following line produces: StackPanelStyle was not found.-->
<StackPanel Style="{StaticResource StackPanelStyle}">
<Label Content="Name:"/>
<TextBox Text="{Binding Name}"/>
</StackPanel>
</StackPanel>
</Expander>
</DataTemplate>
任意のアイデア? 私は別の方法で辞書をマージする必要がありますか?
解決
コードはリソースディクショナリ内のDataTemplateがそれを使用している1知らないので、それだけの を使用されてうまく動作しません。ハリウッドモードと同様。彼らは別々にコンパイルます。
この作業を行うには、DataTemplateを、同じリソースディクショナリにapp.xamlでいるあなたのスタイルを置くことができるか、この結合を好きではない場合、あなたはを別のリソースディクショナリにそれを置くことができ、 DataTemplateをのリソースディクショナリの中にそれをマージします。
他のヒント
あなたのApp.xamlのためのビルドアクションはApplicationDefinitionであるべきであり、あなたのリソースディクショナリファイルのビルドアクションがページにする必要があります。私は、彼らがデフォルトです(と私はあなたがすでにページについて言及したことを参照)ので、あなたは正しい、それらの両方を持って推測してます。
私はあなたの状況で、他の問題を考えることはできません。限り、あなたの静的リソースが、彼らはのように見える正しい順序で定義されているように、それはあなたがあなたのアプリケーションを実行するときにそれらを見つけることができる必要があります。
編集
デバッグアイデア:簡単なボタンスタイルで「TestDictionary.xaml」と呼ばれる新たなリソースディクショナリを作成します。この辞書は、あなたの他の辞書(DataTemplate1.xamlなど)と同じフォルダにあることを確認します。 (他人をコメントアウト)MergedDictionaries
にのみTestDictionaryへのリンクを入れてください。スタートアップ画面上のボタンを入れて、スタイルを適用します。ちょうどそれが動作するかどうかを参照してください。それが失敗した場合、あなたはあなたのマージに問題がある知っています。それが成功した場合、あなたのDataTemplate
についての何かが問題かもしれません。