在后面的代码中设置按钮样式

时间:2017-04-18 14:06:45

标签: c# wpf xceed

如何设置按钮的样式?我使用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.'

2 个答案:

答案 0 :(得分:4)

请务必使用WPF库,而不是WindowsForms或GDI + ...

您应该使用的内容:System.Windows.Media.Brushes包含DarkGreen System.Windows.Media.SolidColorBrush(在PresentationCore.dll中)。

您目前使用的是System.Drawing.BrushesSystem.Drawing.SolidBrush

答案 1 :(得分:2)

TextElement.Foreground is of type System.Windows.Media.Brush。那是"数据类型"。您必须为其分配该类型的值或该类型的某个子类。

System.Drawing.Brushes.DarkGreen的类型为System.Drawing.Brush,它不是System.Windows.Media.Brushes的子类。这是来自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;

但是你必须担心在可以找到它的地方定义它,如果你只使用正确的Brush类,那么你所做的事情无论如何都会正常工作。

令人遗憾的是,我们在多个.NET名称空间中有多个名为Brush的类,其中包含无法提供的名称,例如&#34; System.Windows.Media&#34; vs&#34; System.Drawing&#34;,但不幸的是,它只是那种方式增长。