2010-06-09 51 views
3

我會盡量使它儘可能簡單。在故事板中綁定到'To'

我想這樣做:

<Storyboard x:Name="MoveToLocation"> 
    <DoubleAnimation Duration="0:0:0.5" To="{Binding X}" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="grid" d:IsOptimized="True"/> 
</Storyboard> 

正如你可能已經注意到在綁定「到」屬性不起作用。它似乎只接受靜態值。

如何用MVVM做這個動畫?我不能放入靜態數據,因爲它會改變。

謝謝。

回答

4

DoubleAnimation也不是FrameworkElement因此綁定不起作用。看到我對你之前的question的回答。

爲了達到您的目標,您需要將DataTemplate的內容轉換爲UserControl。然後,這個新控件可以公開一組需要綁定到的依賴項屬性,其中包括一個用於故事板的To值。

+0

第二段是我需要你詳細說明的,謝謝。當我今晚回家時我會試試這個。那麼你是否暗示我應該在對象本身中包含一個Storyboard實例(而不是在xaml中)?似乎有點奇怪,但如果這是我必須做的,那麼我會做到這一點。 – Peanut 2010-06-09 11:17:17

+0

我想我仍然有點困惑 - 我可以將這個整個'對象'包裝到一個用戶控件中,並創建自己的屬性'To',這很好。但是,在某個地方,我仍然需要在故事板中設置(並重新設置)'To'的屬性 - 如您所說,它不可綁定。 – Peanut 2010-06-10 00:04:28

+0

@Peanut:一旦你創建了一個UserControl來封裝這個特定的UI行爲,你可以直接使用「代碼隱藏」操作控件。有時綁定不是答案,你實際上必須編寫代碼來完成這項工作。 – AnthonyWJones 2010-06-10 07:20:35

0

如果你正在嘗試在Style中做到這一點,那就是爲什麼它不起作用。 Silverlight將凍結它,因爲它在該樣式的所有實例中共享。

嘗試把它放在元素本身,應該工作。

+0

對不起,沒有顯示足夠的代碼,但它不是風格。但是,它在DataTemplate中。 (我將有很多需要動畫的對象的實例) – Peanut 2010-06-09 01:25:56