2012-09-19 44 views
5

我有一个Button及其风格:按钮的IsEnabled触发不起作用

<Button Name="MyBtn" Style="{StaticResource ButtonEnabledStyle}" 
     IsEnabled="False" Opacity="1" /> 

<Style x:Key="ButtonEnabledStyle" TargetType="Button"> 
    <Style.Triggers> 
     <Trigger Property="IsEnabled" Value="True" > 
      <Setter Property="Opacity" Value="0.1" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

但是,当我启用按钮(MyBtn.IsEnabled = true)它不会改变其不透明度。为什么?我怎么解决这个问题?谢谢。

+0

在这一点你叫MyBtn.IsEnabled =真的吗?也许在风格初始化之前? – Vale

+0

@Vale不,我打电话时,我点击另一个按钮,控件已经加载。 – Nick

回答

15

在元素上设置的本地值(代码中的Opacity="1")将始终优先于样式或样式触发器值。请看Dependency Property Setting Precedence List

一个简单的办法是设置的样式而不是默认值:

<Style x:Key="ButtonEnabledStyle" TargetType="Button"> 
    <Setter Property="Opacity" Value="1.0" /> 
    <Style.Triggers> 
    <Trigger Property="IsEnabled" Value="True" > 
     <Setter Property="Opacity" Value="0.1" /> 
    </Trigger> 
    </Style.Triggers> 
</Style>