2015-10-14 68 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>