我有一个包含以下资源的用户控件:
<UserControl.Resources>
<ControlTemplate TargetType="Button" x:Key="tmp1">
<Image Source="Resources/img1.png>
</ControlTemplate>
<ControlTemplate TargetType="Button" x:Key="tmp2">
<Image Source="Resources/img2.png>
</ControlTemplate>
</UserControl.Resources>
我尝试使用以下触发器启用按钮时应用模板:
<Style TargetType="Buton">
<Setter Property="Template" Value="{StaticResource tmp1}" />
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=btn1, Path=IsEnabled}" Value="True">
<Setter Property="Template" Value="{StaticResource tmp2}"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
什么都没发生!
但请听一下:当我添加第二个setter时如下:
<Style TargetType="Buton">
<Setter Property="Template" Value="{StaticResource tmp1}" />
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=btn1, Path=IsEnabled}" Value="True">
<Setter Property="Template" Value="{StaticResource tmp2}"></Setter>
<Setter Property="Margin" Value="-6"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
按钮更改了它的模板(并且根本不移动 - 未应用边距!)。
有谁能告诉我这种行为的原因是什么?
答案 0 :(得分:0)
使用标准触发器来观察“IsEnabled”属性。 这样的事情应该有效
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Page.Resources>
<ControlTemplate TargetType="{x:Type Button}" x:Key="tmp1">
<Image Source="img1.png"/>
</ControlTemplate>
<ControlTemplate TargetType="{x:Type Button}" x:Key="tmp2">
<Image Source="img2.png"/>
</ControlTemplate>
<Style TargetType="Button">
<Setter Property="Template" Value="{StaticResource tmp1}" />
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Template" Value="{StaticResource tmp2}"/>
</Trigger>
</Style.Triggers>
</Style>
</Page.Resources>
<Grid>
<Button IsEnabled="False"></Button>
</Grid>
</Page>
希望这有帮助。
Shounbourgh