需要为动态生成的样式提供某种界面(保存/编辑/加载),这些样式由GeometryDrawings组成。问题在于它们缺少Name属性的情况。我尝试过这样的事情:
// some dummy predefined style, it has more drawings but i keep first one
const string templateXaml = @"<DrawingBrush xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"" xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"" Stretch=""Uniform"">
<DrawingBrush.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Geometry=""F1 M 77,92L 704,92L 704,517L 77,517L 77,92 Z "" x:Name=""test_name"">
<GeometryDrawing.Pen>
<Pen Thickness=""4"" LineJoin=""Round"" Brush=""#FFFF7D00""/>
</GeometryDrawing.Pen>
</GeometryDrawing>
<!--More drawings here -->
</DrawingGroup.Children>
</DrawingGroup>
</DrawingBrush.Drawing>
</DrawingBrush>";
var drawingBrush = XamlReader.Parse(templateXaml) as DrawingBrush;
var firstDrawing = (drawingBrush.Drawing as DrawingGroup).Children[0] as GeometryDrawing;
//..
var name = firstDrawing.GetValue(NameProperty);
//..
firstDrawing.SetValue(FrameworkElement.NameProperty, "some value");
我想在名称变量(或类似的东西)中输入x:名称,以便能够更改它,而不是序列化以获得相同的样式,但具有不同的图形名称(现在是大小写)被命名为Element1,2,3 ...,并且必须根据主题区域命名,并且处理必须是自动的但不是手动的,因为没有能力所见即所得 - 每个绘图都被放入Visual,Visuals被放入自定义FrameworkElement等)。当然,使用图纸的整个过程很痛苦,但这是一个我不能忽视的系统设计要求。提前谢谢。
答案 0 :(得分:0)
没有找到比BL类中的包装图更好的方法并序列化/反序列化它们。丢失一致性和违反要求 - 现在我有两个表示图形对象的实体(普通几何和描述它们的类),但它们可以在需要时进行转换/互换。