在后台代码中设置按钮样式

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.BrushesSystem.Drawing.SolidBrush