在后台代码中设置按钮样式
Set button style in code behind
如何设置按钮的样式?我用 Xceed.wpf.toolkit
Xceed.Wpf.Toolkit.MessageBox mbox = new Xceed.Wpf.Toolkit.MessageBox();
System.Windows.Style style = new System.Windows.Style(typeof(System.Windows.Controls.Button));
style.Setters.Add( new System.Windows.Setter(System.Windows.Controls.Button.ForegroundProperty, Brushes.DarkGreen));
mbox.OkButtonStyle = style;
我收到错误
System.Windows.Markup.XamlParseException: ''System.Drawing.SolidBrush' is not a valid value for the 'System.Windows.Documents.TextElement.Foreground' property on a Setter.'
TextElement.Foreground
is of type System.Windows.Media.Brush
。就是这样 "data type"。您必须为其分配该类型的值,或该类型的某些子class。
System.Drawing.Brushes.DarkGreen
属于 System.Drawing.Brush
类型,它不是 System.Windows.Media.Brushes
的子 class。那是来自 Windows Forms 之类的东西,而不是 WPF。您需要为 WPF 控件使用 WPF 画笔对象。
删除 C# 文件顶部的 using System.Drawing;
。在 WPF 项目中,这只会给您带来麻烦。请改用 System.Windows.Media.Brushes.DarkGreen
。
style.Setters.Add( new System.Windows.Setter(System.Windows.Controls.Button.ForegroundProperty,
System.Windows.Media.Brushes.DarkGreen));
您还可以将样式创建为 XAML 资源并使用 FindResource()
加载它。然后你只需说 "DarkGreen" 让 XAML 解析器担心要创建什么样的画笔:
<Style
x:Key="XCeedMBoxButtonStyle"
TargetType="{x:Type Button}"
BasedOn="{StaticResource {x:Type Button}}"
>
<Setter Property="TextElement.Foreground" Value="DarkGreen" />
</Style>
C#
var style = FindResource("XCeedMBoxButtonStyle") as Style;
但是你必须担心在可以找到它的地方定义它,如果你使用正确的画笔 class,你所做的无论如何都会正常工作。
令人毛骨悚然的是,我们在多个 .NET 名称空间中有多个名为 Brush
的 class 名称,它们的名称不提供信息,例如 "System.Windows.Media" 与 "System.Drawing",但不幸的是一切都是那样成长的。
一定要使用 WPF 库而不是 WindowsForms 或 GDI+ 库...
您应该使用什么:System.Windows.Media.Brushes
其中包含 DarkGreen
作为 System.Windows.Media.SolidColorBrush
(在 PresentationCore.dll 中)。
您目前使用的是System.Drawing.Brushes
和System.Drawing.SolidBrush
。
如何设置按钮的样式?我用 Xceed.wpf.toolkit
Xceed.Wpf.Toolkit.MessageBox mbox = new Xceed.Wpf.Toolkit.MessageBox();
System.Windows.Style style = new System.Windows.Style(typeof(System.Windows.Controls.Button));
style.Setters.Add( new System.Windows.Setter(System.Windows.Controls.Button.ForegroundProperty, Brushes.DarkGreen));
mbox.OkButtonStyle = style;
我收到错误
System.Windows.Markup.XamlParseException: ''System.Drawing.SolidBrush' is not a valid value for the 'System.Windows.Documents.TextElement.Foreground' property on a Setter.'
TextElement.Foreground
is of type System.Windows.Media.Brush
。就是这样 "data type"。您必须为其分配该类型的值,或该类型的某些子class。
System.Drawing.Brushes.DarkGreen
属于 System.Drawing.Brush
类型,它不是 System.Windows.Media.Brushes
的子 class。那是来自 Windows Forms 之类的东西,而不是 WPF。您需要为 WPF 控件使用 WPF 画笔对象。
删除 C# 文件顶部的 using System.Drawing;
。在 WPF 项目中,这只会给您带来麻烦。请改用 System.Windows.Media.Brushes.DarkGreen
。
style.Setters.Add( new System.Windows.Setter(System.Windows.Controls.Button.ForegroundProperty,
System.Windows.Media.Brushes.DarkGreen));
您还可以将样式创建为 XAML 资源并使用 FindResource()
加载它。然后你只需说 "DarkGreen" 让 XAML 解析器担心要创建什么样的画笔:
<Style
x:Key="XCeedMBoxButtonStyle"
TargetType="{x:Type Button}"
BasedOn="{StaticResource {x:Type Button}}"
>
<Setter Property="TextElement.Foreground" Value="DarkGreen" />
</Style>
C#
var style = FindResource("XCeedMBoxButtonStyle") as Style;
但是你必须担心在可以找到它的地方定义它,如果你使用正确的画笔 class,你所做的无论如何都会正常工作。
令人毛骨悚然的是,我们在多个 .NET 名称空间中有多个名为 Brush
的 class 名称,它们的名称不提供信息,例如 "System.Windows.Media" 与 "System.Drawing",但不幸的是一切都是那样成长的。
一定要使用 WPF 库而不是 WindowsForms 或 GDI+ 库...
您应该使用什么:System.Windows.Media.Brushes
其中包含 DarkGreen
作为 System.Windows.Media.SolidColorBrush
(在 PresentationCore.dll 中)。
您目前使用的是System.Drawing.Brushes
和System.Drawing.SolidBrush
。