我有一个现有项目,它是画布的子项。项目的样式包含在资源字典中,其中包含可用于为项目着色的各种画笔。
当创建项目的实例时,它会被赋予默认颜色。我目前无法直接与 Fill 属性进行交互,如下所示:
item.Fill = BrushBlue;
出于这个原因,我开始查看该项目的每个实例的 XAML。
创建实例后,我对该项目感兴趣的 XAML 是:
<d:Item IsSelected="True" Width="78" Height="65" Panel.ZIndex="0" Canvas.Left="233" Canvas.Top="352.54">
<Path ToolTip="Process">
<Path.Style>
<Style TargetType="Path">
<Style.BasedOn>
<Style TargetType="Path">
<Style.Resources>
<ResourceDictionary />
</Style.Resources>
<Setter Property="Shape.Fill">
<Setter.Value>
<DynamicResource ResourceKey="ItemBrush" />
</Setter.Value>
</Setter>
</Style>
</Style.BasedOn>
</Style>
</Path.Style>
</Path>
.
.
.
</d:Item>
理想情况下,我希望能够将 Shape.Fill 值绑定到项目实例的属性,或者至少能够根据应用程序中的用户选择更改该值。
我正在编辑项目的 XAML 以更改其填充颜色。为此,我使用以下代码,基于 MSDN 中的按钮克隆示例:
string savedItem = XamlWriter.Save(this) as String;
string newItem = savedItem.Replace(GetFillBrush(this), "BrushBlue");
SetFillBrush(this, "BrushBlue");
StringReader stringReader = new StringReader(newItem);
XmlReader xmlReader = XmlReader.Create(stringReader);
thisCanvas.Children.Add((Item)XamlReader.Load(xmlReader));
我正在获取 XAML,更新画笔资源名称,然后生成一个新项目。
这种方法是概念验证。我希望能够更新现有项目的 XAML,而不必在画布上创建新项目。
完成项目填充属性的“就地”更新的最佳方法是什么?