C# 为什么SetTarget是故事板的静态方法

C# 为什么SetTarget是故事板的静态方法,c#,.net,silverlight,C#,.net,Silverlight,我想知道MS类(故事板)和相关类中的一个细节——时间线 以下是这些类的文档: 根据MS文档,要在时间轴上设置目标,我们需要使用故事板静态方法。为什么会这样?有人知道这个决定的背景吗 有关时间轴目标的信息存储在哪里?在故事板静态字段中?情节提要中的对象是否为时间轴父对象?在时间线的私有字段中 如果您有关于此实现的任何信息,请提前告知。当我遇到Silverlight/WPF时,使用静态方法一开始让我感到很困惑。数据实际上存储在时间线上,而不是其他地方,但为什么是静态方法,而不仅仅是时间线上对

我想知道MS类(故事板)和相关类中的一个细节——时间线

以下是这些类的文档:

根据MS文档,要在时间轴上设置目标,我们需要使用故事板静态方法。为什么会这样?有人知道这个决定的背景吗

有关时间轴目标的信息存储在哪里?在故事板静态字段中?情节提要中的对象是否为时间轴父对象?在时间线的私有字段中


如果您有关于此实现的任何信息,请提前告知。

当我遇到Silverlight/WPF时,使用静态方法一开始让我感到很困惑。数据实际上存储在时间线上,而不是其他地方,但为什么是静态方法,而不仅仅是时间线上对象本身的方法

原因是:大多数WPF/Silverlight元素都有很多属性:背景、字体、笔划厚度等。如果以传统方式实现,这些将消耗大量内存

相反,Silverlight/WPF引入了DependencyProperties的概念。这些是可以在DependencyObject上设置的属性。如果不设置它们,将获得默认值,并且不会使用额外的内存
SetValue(ThePropertyName,value)
GetValue(ThePropertyName)
通常用于设置和检索依赖项属性值

此外,还有一个想法叫做AttachedProperty。附加属性是由第三方定义的属性,可以附加到DependencyObject。这类似于Visual Basic中的属性扩展程序。它允许根据现有元素定义其他属性。故事板动画就是这样实现的。

目标是一个附加属性,它的getter和setter必须始终是静态的。MSDN页。