我想將按鈕的背景顏色更改爲正常,隱藏和按下的狀態爲各種不同的綠色。我被迫添加以下奇怪的詳細Button.Template
到我的按鈕,以便我可以修改RenderMouseOver
和RenderPressed
屬性以使用Binding
而不是TemplateBinding
,以便我的觸發器(在Button.Style
中)實際上生效,而不是由於編譯而被忽略時間性質爲TemplateBinding
。無論如何,爲了更好地覆蓋Aero主題而重寫這兩個屬性要比重複整個模板綁定更重要嗎? XAML如下:如何在不重複整個控件模板的情況下將TemplateBindings更改爲按鈕控件模板中的綁定
<Window x:Class="ButtonMouseOver.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Button>
Hello
<Button.Template>
<ControlTemplate TargetType="{x:Type Button}">
<Microsoft_Windows_Themes:ButtonChrome SnapsToDevicePixels="true"
x:Name="Chrome" Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}" RenderDefaulted="{TemplateBinding IsDefaulted}"
RenderMouseOver="{Binding IsMouseOver}" RenderPressed="{Binding IsPressed}"
>
<ContentPresenter Margin="{TemplateBinding Padding}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
RecognizesAccessKey="True"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Microsoft_Windows_Themes:ButtonChrome>
</ControlTemplate>
</Button.Template>
<Button.Style>
<Style TargetType="Button">
<Setter Property="Background" Value="LightGreen"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property = "Background" Value="Green"/>
</Trigger>
<Trigger Property="IsPressed" Value="true">
<Setter Property = "Foreground" Value="DarkGreen"/>
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
</Grid>
</Window>
重要提示:控制模板只爲Aero主題是必要的。對於其他主題,僅僅使用Button.Style就可以完成這項工作。
我不明白你爲什麼不創建一個樣式來處理這個問題,只是將它應用到每個按鈕,你認爲合適?我錯過了抵制這種行爲的那一塊......?看起來像我的標準按鈕樣式... – 2010-12-13 19:36:09
抵制這種行爲的部分是Aero Chrome。我添加了一個註釋來強調這一事實。 – 2010-12-13 21:34:51