在C#中修改资源?

时间:2010-10-06 23:05:47

标签: c# wpf resources

我在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的值?

1 个答案:

答案 0 :(得分:1)

当您在XAML中使用Resources扩展时,您正在处理ResourceDictionary,并且您正在处理向此添加结构(也就是值类型),它将通过值(也称为复制)传递到此字典中,并且然后当您提出要求时,您将收到一份副本。

在处理ResourceDictionary时,无法通过引用传递值类型。

但是,如果您在修改副本后确实需要执行此操作,则可以使用修改后的副本替换字典中的旧副本。

您可以通过以下方式尝试:

myPath.SetResourceReference("myPoint", myPointReference)

您可能想要考虑不在XAML中或使用ResourceDictionary执行此操作。您只需在后面的代码中管理Point并更新它并根据需要将其设置为Path。