這個問題在這里已經有了答案: 如何在 WPF 中更改按鈕 MouseOver 的背景? (6 個回答) 9 天前關閉。
我正在嘗試從代碼創建一個按鈕并使懸停顏色發生變化,由于某種原因,設定器等沒有得到應用。我很確定我要么錯過了一步,要么是其他東西,但沒有任何變化,甚至沒有懸停時的顏色。我不是想在 XAML 中制作按鈕,而是在代碼中創建它,我知道如何在 XAML 中完成。
System.Windows.Controls.Button createPlaylist = new System.Windows.Controls.Button()
{
Height = 100,
Width = 100,
Margin = new Thickness(0,50,0,0)
};
// STYLE END //
var dt = new DataTemplate();
Style style = new Style(typeof(System.Windows.Controls.Button), createPlaylist.Style);
Trigger t = new Trigger();
t.Property = IsMouseOverProperty;
t.Value = true;
Setter setter = new Setter();
setter.Property = BackgroundProperty;
setter.Value = Brushes.Blue;
t.Setters.Add(setter);
Trigger s = new Trigger();
s.Property = IsMouseOverProperty;
s.Value = false;
Setter set = new Setter();
set.Property = BackgroundProperty;
set.Value = Brushes.Red;
s.Setters.Add(setter);
style.Triggers.Add(t);
createPlaylist.Style = style;
uj5u.com熱心網友回復:
您必須在按鈕的模板中管理邊框的背景顏色,而不僅僅是更改按鈕本身的背景屬性。
即做這個 XAML 的等價物:
<Style TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border Background="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Background}">
<ContentPresenter/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Blue"/>
</Trigger>
</Style.Triggers>
</Style>
后面的代碼是這樣的:
Style buttonStyle = new Style();
FrameworkElementFactory contentBorder = new FrameworkElementFactory(typeof(Border));
contentBorder.AppendChild(new FrameworkElementFactory(typeof(ContentPresenter)));
contentBorder.SetBinding(Border.BackgroundProperty, new Binding { RelativeSource = RelativeSource.TemplatedParent, Path = new PropertyPath(nameof(Background)) });
ControlTemplate templateButton = new ControlTemplate(typeof(Button)) { VisualTree = contentBorder };
buttonStyle.Setters.Add(new Setter { Property = Button.TemplateProperty, Value = templateButton });
Trigger styleTrigger = new Trigger { Property = Button.IsMouseOverProperty, Value = true };
styleTrigger.Setters.Add(new Setter { Property = Button.BackgroundProperty, Value = Brushes.Blue });
buttonStyle.Triggers.Add(styleTrigger);
createPlaylist.Style = buttonStyle;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/436758.html
上一篇:WPF應用程式(XAML)中的Unity視窗未調整大小
下一篇:如果SQL中的行為空,則聯合
