我有一个主题应用于资源字典中的所有按钮.现在我想在继承字典中的样式更改时向按钮添加触发器.我尝试了以下代码,但它说无法找到控件.我该如何解决?
<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>
Run Code Online (Sandbox Code Playgroud)
基本模板:
<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>
Run Code Online (Sandbox Code Playgroud)
Nat*_*end 23
我过去使用过的一个技巧:在你ResourceDictionary的应用程序中为你的应用程序定义毛毯样式,添加一个x:Key你想要继承的样式,如下所示:
<Style TargetType="{x:Type Button}" x:Key="ButtonStyle">
<!-- your style here -->
</Style>
Run Code Online (Sandbox Code Playgroud)
要将此样式应用于指定类型的所有控件(Button在此示例中)而不必显式设置Styleevery 的属性Button,请添加另一个样式,即BasedOn此样式但没有键:
<Style TargetType="{x:Type Button}" BasedOn="{StaticResource ButtonStyle}" />
Run Code Online (Sandbox Code Playgroud)
使用此方法,Button应用程序中的所有内容都将自动继承您的自定义样式,但您仍然可以创建其他样式BasedOn的ButtonStyle条目,并避免吹走所有自定义样式.
Pie*_*ler 20
给你的基础风格一个名字,比如说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>
Run Code Online (Sandbox Code Playgroud)