C# ControlBrushKey在PresentationFramework.dll中引发异常

C# ControlBrushKey在PresentationFramework.dll中引发异常,c#,wpf,C#,Wpf,只有当我有那个ControlBrushKey行时才会抛出未处理的异常,并且它不会指向那个位置而中断 var x2 = new Style(); x2.Resources.Add(SystemColors.ControlBrushKey, Colors.Red); myListbox.ItemContainerStyle = x2 PresentationFramework.dll中发生类型为“System.InvalidCastException”的未处理异常 其他信息:无法将“System.

只有当我有那个ControlBrushKey行时才会抛出未处理的异常,并且它不会指向那个位置而中断

var x2 = new Style();
x2.Resources.Add(SystemColors.ControlBrushKey, Colors.Red);
myListbox.ItemContainerStyle = x2
PresentationFramework.dll中发生类型为“System.InvalidCastException”的未处理异常

其他信息:无法将“System.Windows.Media.Color”类型的对象强制转换为“System.Windows.Media.Brush”类型

这是PresentationFramework.dll错误还是我遗漏了什么?我使用.NET4


(注:我必须在代码上执行此操作)

颜色。红色
返回一个
System.Windows.Media.Color
类型。无论在何处使用,都需要
System.Windows.Media.Brush
类型,这就是为什么会出现错误(没有从
Media.Color
Media.Brush
的隐式转换)。您需要使用笔刷或仅创建新笔刷将颜色转换为笔刷。比如说

myObject.Background = new SolidColorBrush(x2[SystemColors.ControlBrushKey]);
或者,您可以添加
SolidColorBrush
对象作为字典值,而不是
Colors.Red
作为
Style.Resources.add
采用
对象
类型作为值

x2.Resources.Add(SystemColors.ControlBrushKey, new SolidColorBrush(Colors.Red));

您选择的方法可能取决于您是更频繁地使用
颜色
类型还是使用
笔刷
类型。对于
ItemContainerStyle
而言,我认为第二种方法会更简单。

非常感谢您的解释!第二种方法似乎更容易。不客气:)我认为在这种情况下,第二种方法会更容易,因为
ItemContainerStyle
内部需要笔刷类型。