在WPF內部的XAML中如何擴展ControlTemplate,以便當應用於按鈕並且按鈕被禁用時,它將在禁用時淡化爲0.5不透明度,一旦啓用則淡出回到1.0不透明度。如何將ControlTemplate啓用的屬性綁定到WPF XAML中的不透明度
當父母被禁用時,這種視覺效果也應該起作用。
在WPF內部的XAML中如何擴展ControlTemplate,以便當應用於按鈕並且按鈕被禁用時,它將在禁用時淡化爲0.5不透明度,一旦啓用則淡出回到1.0不透明度。如何將ControlTemplate啓用的屬性綁定到WPF XAML中的不透明度
當父母被禁用時,這種視覺效果也應該起作用。
您不需要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爲假。如果您可以使用樣式,我仍然會推薦樣式方法。我相信更簡單。
謝謝,作爲一個風格觸發器正常工作。 – zproxy 2009-04-27 09:05:01