WPF - 当Command.CanExecute为false时,更改Button controltemplate背景

时间:2015-10-14 08:37:51

标签: wpf mvvm controltemplate

情形: 使用按钮的默认实现时,以下功能有效:

当canExeucte命令为true时 - >按钮已启用且按钮背景未更改。

当CanExecute命令为false时 - >该按钮被禁用,背景为“灰色”。

使用Button ControlTemplate样式时,CanExecute为false - >该按钮按预期禁用,但背景未更改。

如何更改“控制模板”按钮的背景?

图片: https://onedrive.live.com/redir?resid=3A8F69A0FB413FA4!125&authkey=!ALh_kjfxMMNzhSY&v=3&ithint=photo%2cpng

Control Template: 

 <!--button-->
    <ControlTemplate x:Key="ButtonTemplate" TargetType="{x:Type Button}">

        <Border x:Name="border" CornerRadius="0" Background="Green"  BorderBrush="#FF06A6F0"  BorderThickness="1" Opacity="1"  Width="147" Height="50" >
            <ContentPresenter x:Name="contentPresenter"  
                              ContentTemplate="{TemplateBinding ContentTemplate}" 
                              Content="{TemplateBinding Content}" 
                              HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
                              Margin="{TemplateBinding Padding}" 
                              VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                              />
        </Border>

        <ControlTemplate.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Opacity" Value="0.8" />
            </Trigger>
        </ControlTemplate.Triggers>

    </ControlTemplate>
    <Style x:Key="StyleButtonTemplate" TargetType="{x:Type Button}">
        <Setter Property="Template" Value="{DynamicResource ButtonTemplate}" />
        <Setter Property="FontSize" Value="18pt" />
        <Setter Property="Foreground" Value="White" />
        <Setter Property="Cursor" Value="Hand" />
        <Setter Property="Button.Effect">
            <Setter.Value>
                <DropShadowEffect Color="Black" Direction="140" ShadowDepth="5" BlurRadius="5" Opacity="0.1" />
            </Setter.Value>
        </Setter>
    </Style>

1 个答案:

答案 0 :(得分:3)

当您重新模板控件时,所有视觉状态都应由您自己管理。在这种情况下,将忽略禁用状态。如果Trigger为false,则使用IsEnabled更改背景的简单方法:

<ControlTemplate.Triggers>
     <Trigger Property="IsMouseOver" Value="True">
        <Setter Property="Opacity" Value="0.8" />
     </Trigger>
     <Trigger Property="IsEnabled" Value="False">
        <Setter TargetName="border" Property="Background" Value="Gray"/>
     </Trigger>         
</ControlTemplate.Triggers>
相关问题