【发布时间】:2015-03-11 23:32:12
【问题描述】:
我正在尝试使用 XAML 解析器引用 LinearGradientBrush,但它无法识别对象并且出现异常:
“无法创建未知类型'LinearGradientBrush'”
是否可以在运行时识别这种类型?
这是我正在使用的代码:
public static class CustomBrushes
{
public static Brush LinGrad_Bevel()
{
StringReader sr = new StringReader(@"<LinearGradientBrush EndPoint='0.5,1' MappingMode='RelativeToBoundingBox' StartPoint='0.5,0'>
<GradientStop Color='#00F7F7F7' Offset='0'/>
<GradientStop Offset='1'/>
<GradientStop Color='Black' Offset='0.741'/>
<GradientStop Color='Black' Offset='0.75'/>
<GradientStop Color='White' Offset='0.25'/>
</LinearGradientBrush>");
XmlReader xr = XmlReader.Create(sr);
return (Brush)XamlReader.Load(xr);
}
}
我真的不喜欢在 XAML 中编程(尤其是因为我所做的大部分工作都是依赖于运行时程序流程的设计,但有些对象在其中制作原型比 C# 更容易,我更希望能够采用这种方法...
我读过我应该在某处包含这样的一行,但老实说我不明白为什么,如果我把它放在所有“使用”下面似乎不起作用
[assembly: XmlnsDefinition("http://schemas.microsoft.com/netfx/2007/xaml/presentation" , "System.Windows.Media")]
无论如何,如果对 C# 代码文件中 XAML 的运行时解析提供任何帮助,我们将不胜感激。
【问题讨论】:
-
SOC(关注点分离)有待完成!如果您确实需要这样做,请使用 WPF API 中的对象。
-
这个特定 UserControl 的整个代码都是在代码隐藏中完成的。我对 XAML 不太熟悉如何在运行时对 GUI 进行大量更改而不使用 C#,这正是 UserControl 所做的(大量添加和减去网格对象以及调整它们的大小等) - 但我可以在 C# 中完成。我只是认为设计一个我喜欢的画笔并解析它会更容易,而不是用 C# 手动写出来......
标签: c# wpf xaml xamlparseexception xamlreader