我在XAML中定义了一个资源(myPoint),如下所示:
<Path Name="myPath">
<Path.Resources>
<Point x:Key="myPoint" X="200" Y="200"/>
</Path.Resources>
</Path>
在相应C#代码的OnApplyTemplate覆盖中,我使用以下内容来获取对此资源的引用。
myPointReference = (Point)myPath.FindResource("myPoint");
现在,每当我修改myPointReference的值时,让我们说,
myPointReference.X = 30;
它不会修改资源myPoint的值,它只会更改myPointReference的值。如何使myPointReference成为我的XAML定义资源myPoint的实际引用,这样当我修改myPointReference的值时,我也在修改myPoint的值?
答案 0 :(得分:1)
当您在XAML中使用Resources扩展时,您正在处理ResourceDictionary,并且您正在处理向此添加结构(也就是值类型),它将通过值(也称为复制)传递到此字典中,并且然后当您提出要求时,您将收到一份副本。
在处理ResourceDictionary时,无法通过引用传递值类型。
但是,如果您在修改副本后确实需要执行此操作,则可以使用修改后的副本替换字典中的旧副本。
您可以通过以下方式尝试:
myPath.SetResourceReference("myPoint", myPointReference)
您可能想要考虑不在XAML中或使用ResourceDictionary执行此操作。您只需在后面的代码中管理Point并更新它并根据需要将其设置为Path。