2015-05-14 50 views
2

我想知道MS類(Storyboard)和相關類 - 時間軸中的細節之一。爲什麼SetTarget是一個Storyboard的靜態方法

以下是文檔這些類:

根據MS文檔設置了一個目標,時間表,我們需要用故事板靜態方法。爲什麼?有誰知道這個決定的背景嗎?

何時存儲有關時間軸目標的信息?在Storyboard靜態字段中?在故事板對象是時間軸父級?在時間軸的私人領域?

如果您有任何關於此實施的信息,請提前致謝,因爲我不知道他們採取這一行動的原因是否有原因。

+1

http://referencesource.microsoft.com/#PresentationFramework/Framework/System/Windows/Media/Animation/Storyboard.cs,81222d8a2eaf2532,references –

+3

* Target *是一個附屬屬性,它的getter和setter必須總是是靜態的。 MSDN頁面[在這裏](https://msdn.microsoft.com/en-us/library/ms749011%28v=vs.110%29.aspx#custom)。 –

回答

3

當我遇到Silverlight/WPF時,靜態方法的使用首先讓我感動。數據實際上存儲在時間軸上,而不是其他地方,但爲什麼是靜態方法,而不僅僅是時間軸對象本身的方法?

原因是這樣的:大多數WPF/Silverlight元素都有很多屬性:背景,字體,筆畫粗細等等。如果它們是以傳統的方式實現的,則會消耗大量的內存。

相反,Silverlight/WPF引入了DependencyProperties的概念。這些是可以在DepedencyObject上設置的屬性。如果你不設置它們,你會得到默認值,並且不會使用額外的內存。 SetValue(ThePropertyName, value)GetValue(ThePropertyName)通常用於設置和檢索依賴項屬性值。

此外,還有一個名爲AttachedProperty的想法。附加屬性是由第三方定義的屬性,可以將附加到DependencyObject的。這與Visual Basic中的屬性擴展器類似。它允許針對現有元素定義其他屬性。故事板動畫以這種方式實現。

相關問題