2011-03-22 38 views
4

我在玩WPF動畫,並面臨一些有線問題。有線問題與動畫和雙向綁定

我有一個滑塊和一個文本框。文本框是使用2路綁定綁定到Slider.Value:

<StackPanel> 
    <Slider x:Name="MySlider" Minimum="0" Maximum="100" Value="50" /> 
    <TextBox Text="{Binding ElementName=MySlider, Path=Value, Mode=TwoWay}" /> 
    <Button Click="Button_Click">Test</Button> 
</StackPanel> 

當我拖動滑塊,文本在文本框的變化。當我改變文本框中的文本時,滑塊的值被更新,它工作正常。

現在我添加一個動畫,將Slider.Value屬性動畫化爲0.我在按鈕按下時啓動它。

private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     Storyboard storyBoard = new Storyboard(); 
     DoubleAnimation animation = new DoubleAnimation(); 

     animation.Duration = new Duration(TimeSpan.FromSeconds(0.5)); 
     animation.To = 0; 

     Storyboard.SetTarget(animation, MySlider); 
     Storyboard.SetTargetProperty(animation, new PropertyPath(Slider.ValueProperty)); 

     storyBoard.Children.Add(animation); 

     storyBoard.Begin(); 
    } 

當我按下按鈕,動畫滾動滑塊爲0文本框也變爲0 syncronyously woth滑塊。

現在我面臨這個問題。動畫後,我無法更改文本框中的文本。我改變文本,移動焦點和滑塊值重置爲0的文本。我仍然可以移動滑塊,並使用滑塊值更新文本框。但我無法使用文本框設置滑塊值。

我認爲當動畫停止時,值以某種方式凍結在animation.To屬性中指定的值上,但我無法確定如何解凍它。或者可能是別的東西?

謝謝

回答

3

這是因爲依賴屬性值的優先級,這意味着價值的動畫設定具有較高的「優先級」,比通過結合設定值。

下面是從MSDN就如何解決此報價:

一種方法重新獲得代碼的 動畫屬性的控制是使用 的BeginAnimation方法,並指定 空的AnimationTimeline 參數。有關更多信息和 示例,請參見How to: Set a Property After Animating It with a Storyboard

+0

謝謝,這個鏈接非常有幫助! – 2011-03-22 20:26:10