我試圖在選中按鈕時更改切換按鈕的懸停顏色。由于某種原因,它不起作用。但是,我可以更改邊框的粗細。
<!--App.xaml-->
<ResourceDictionary>
<Style x:Key="MyStyle" TargetType="{x:Type ToggleButton}">
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsChecked" Value="True"/>
<Condition Property="IsMouseOver" Value="True"/>
</MultiTrigger.Conditions>
<Setter Property="BorderThickness" Value="10"/> <!--works-->
<Setter Property="BorderBrush" Value="Red"/> <!--fails-->
<Setter Property="Background" Value="Red"/> <!--fails-->
</MultiTrigger>
</Style.Triggers>
</Style>
</ResourceDictionary>
<!--MainWindow.xaml-->
<Grid>
<ToggleButton
Style="{StaticResource MyStyle}"
Content="Button"
HorizontalAlignment="Left"
Margin="271,0,0,0"
VerticalAlignment="Center"
Height="108"
Width="192"
/>
</Grid>
uj5u.com熱心網友回復:
這是因為 ToggleButton 有一個 ControlTemplate 來定義它的視覺結構——而且這個模板優先于樣式設定器。該模板使用一個帶有 x:Name Border 的 Border 元素來呈現 ToggleButton 的邊框,并使用一個名為 ContentPresenter 的 Grid 來承載按鈕的內容。該模板還定義了當按鈕處于 MouseOver 狀態時修改邊框屬性的觸發器 - 這些觸發器比樣式觸發器具有更高的優先級。要覆寫此行為,您需要在您的樣式中使用模板系結:
<Style x:Key="MyStyle" TargetType="ToggleButton">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToggleButton">
<Border x:Name="Border"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
...
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsChecked" Value="True"/>
<Condition Property="IsMouseOver" Value="True"/>
</MultiTrigger.Conditions>
<Setter Property="BorderBrush" Value="Red"/>
<Setter Property="BorderThickness" Value="10"/>
</MultiTrigger>
</Style.Triggers>
</Style>
現在樣式設定器將更新模板中定義的 Border 元素的屬性,覆寫默認的懸停行為。請注意,您還應該為要設定樣式的所有其他屬性(背景、前景等)包括模板系結。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/527661.html
標籤:C#wpf切换按钮
下一篇:在R的資料框中洗掉NA
