我的Button控件的样式模板如下所示:
<Style x:Key="myBtnStyle" TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border x:Name="border" Width="100" Height="25"
Padding="5,5,5,5" CornerRadius="5,5,5,5"
Background="LightGray" BorderBrush="Black"
BorderThickness="1,1,1,1">
<ContentPresenter
x:Name="cpButton"
VerticalAlignment="Center"
HorizontalAlignment="Center"
Width="Auto" Height="Auto" Margin="-6">
</ContentPresenter>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Background" TargetName="border" Value="GhostWhite"></Setter>
<Setter Property="BorderBrush" TargetName="border" Value="Gainsboro"></Setter>
<Setter Property="Foreground" Value="Gray"></Setter>
</Trigger>
<Trigger Property="IsPressed" Value="true">
<Setter Property="Background" TargetName="border" Value="SkyBlue"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
我的按钮实例本身:
<Button Name="btnResetCount" Content="Reset" Command="{Binding Path=CalcViewModel.ResetCounter}" Style="{StaticResource myBtnStyle}" IsEnabled="{Binding IsButtonCounterEnabled,Mode=OneWay, UpdateSourceTrigger=PropertyChanged}">
IsEnabled属性的绑定工作正常。因此,从我的ViewModel中设置IsEnabled是正确的。
但我的问题是我的样式IsEnabled <ControlTemplate.Triggers>
没有在UI中自动加载/刷新。我总是先点击任何其他控件。一旦我点击另一个控件,按钮的样式也会改变。
如何根据IsEnabled事件自动更新/刷新按钮/任何控件的样式?
修改
最后,我得到了一个解决方法。我不高兴,我确信有更好的方法。但它确实有效。
在我实现的ViewModel中:
CommandManager.InvalidateRequerySuggested();
通过调用此方法,控件将刷新。 如果给出启用按钮的条件,我只是在我的一个属性中调用它。
提前致谢!
答案 0 :(得分:0)
再创建一个触发器并设置IsEnabled=true
的样式:
<Trigger Property="IsEnabled" Value="true">
<Setter Property="Background" TargetName="border" Value="Black"/>
<Setter Property="BorderBrush" TargetName="border" Value="Black"/>
<Setter Property="Foreground" Value="Gray"/>
</Trigger>