2009-04-27 60 views

回答

8

您不需要ControlTemplate。你可以用樣式來完成。以下按鈕樣式適用於所有按鈕。當IsEnabled爲true時,它將Opacity設置爲0.5,並在觸發條件不再適用時自動將其返回1。如果您在樣式中應用ControlTemplate,則可以將此觸發器添加到該樣式中。由於IsEnabled是繼承的,所以它在父代被禁用時也有效。

<Window.Resources> 
    <Style TargetType="{x:Type Button}"> 
     <Style.Triggers> 
      <Trigger Property="Control.IsEnabled" Value="false"> 
       <Setter Property="Control.Opacity" Value="0.5" /> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
</Window.Resources> 

或者您是否特別需要ControlTemplate解決方案?

更新

我不認爲TemplateBinding支持轉換器,所以如果你想這樣做的ControlTemplate中,你需要使用類似下面約束力的聲明在邏輯樹不夠高。

Opacity={Binding Path=IsEnabled, 
     RelativeSource={RelativeSource TemplatedParent}, 
     Converter={StaticResource BoolToDoubleConverter}} 

其中BoolToDoubleConverter是一個IValueConverter,它返回1爲真,0.5爲假。如果您可以使用樣式,我仍然會推薦樣式方法。我相信更簡單。

+0

謝謝,作爲一個風格觸發器正常工作。 – zproxy 2009-04-27 09:05:01

相關問題