リソースディクショナリのすべてのボタンに適用されるテーマがあります。辞書からスタイルの変更を継承しながら、ボタンにトリガーを追加したいと思います。次のコードを試しましたが、コントロールが見つからないと表示されます。どうすれば修正できますか?
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Theme.xaml"/>
</ResourceDictionary.MergedDictionaries>
<conv:ErrorContentConverter x:Key="ErrorContentConverter" />
<Style x:Key="ValidTrigger"
TargetType="Control" BasedOn="{StaticResource {x:Type Control}}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsValid}" Value="False">
<Setter Property="IsEnabled" Value="false" />
</DataTrigger>
</Style.Triggers>
</Style>
</ResourceDictionary>
</UserControl.Resources>
基本テンプレート:
<Style TargetType="{x:Type Button}" BasedOn="{x:Null}">
<Setter Property="FocusVisualStyle"
Value="{DynamicResource NuclearButtonFocusVisual}" />
<Setter Property="Foreground" Value="#FF042271" />
<Setter Property="FontFamily" Value="Trebuchet MS" />
<Setter Property="FontSize" Value="12" />
<Setter Property="Padding" Value="3" />
<Setter Property="Template" Value="{DynamicResource ButtonTemplate}" />
</Style>
ベーススタイルに名前を付けます(FooStyleなど)。
与えた例では、TargetTypeとBasedOnを次のように変更します。
<Style x:Key="ValidTrigger"
TargetType="{x:Type Control}" BasedOn="{StaticResource {x:Type Control}}" >
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsValid}" Value="False">
<Setter Property="IsEnabled" Value="false" />
</DataTrigger>
</Style.Triggers>
</Style>
私が過去に使用したトリックの1つ:アプリケーションの包括的スタイルを定義するResourceDictionary
で、継承するスタイルにx:Key
を次のように追加します。
<Style TargetType="{x:Type Button}" x:Key="ButtonStyle">
<!-- your style here -->
</Style>
すべてのButton
のStyle
属性を明示的に設定せずに、指定されたタイプ(この例ではButton
)のすべてのコントロールにこのスタイルを適用するには、このスタイルのBasedOn
であるが、キーを持たない別のスタイルを追加します。
<Style TargetType="{x:Type Button}" BasedOn="{StaticResource ButtonStyle}" />
このメソッドを使用すると、アプリケーション内のすべてのButton
がカスタムスタイルを自動的に継承しますが、追加のスタイルBasedOn
ButtonStyle
エントリを作成して、すべてのカスタムスタイルを吹き飛ばさないようにすることができます。
「コントロール」には基本スタイルが定義されていないと思うので、BasedOn="{StaticResource {x:Type Control}}"
パーツは何も見つかりません。
あなたはおそらく変更したい
<Style x:Key="ValidTrigger" TargetType="Control" BasedOn="{StaticResource {x:Type Control}}" >
に
<Style x:Key="ValidTrigger" TargetType="Button" BasedOn="{StaticResource {x:Type Button}}" >