我正在玩 WPF 动画并遇到了一个奇怪的问题。
我有一个Slider
和一个TextBox
。TextBox 使用 2-way 绑定绑定到 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();
var 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();
}
当我按下按钮时,动画将 Slider 滚动到 0。 TextBox 也与滑块同步更改为 0。
现在我面临这个问题。动画后,我无法更改 TextBox 中的文本。我更改文本,移动焦点,并且带有滑块值的文本重置为 0。我仍然可以移动滑块,并且 TextBox 使用滑块值更新。但我无法使用 TextBox 设置 Slider 值。
我认为当动画停止时,该值会以某种方式冻结在animation.To
属性中指定的值上,但我不知道如何解冻它。或者也许是别的东西?