2015-10-14 85 views
1

情景: 当使用按钮的默认实现以下功能的工作原理:WPF - 更改按钮控件模板的背景时Command.CanExecute是假

当canExeucte命令是真实的 - >按钮启用和按钮的背景没有改变。

当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> 

回答

3

当您重新模板控制,所有的可视状态应该由自己管理。在这种情况下,禁用状态将被忽略。如果使用Trigger来更改后台(如果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>