Wpf: свойство привязки анимации не работает.
Привязка свойства Duration DoubleAnimation внутри раскадровки не обновляет конвертер, когда UpdateTarget () вызывается вручную.
Файл MainWindow.язык XAML:
<Grid> <local:UserControl2/> </Grid>
UserControl2.язык XAML:
<UserControl.Resources> <local:Converter x:Key="Converter"></local:Converter> <Storyboard x:Key="Storyboard"> <DoubleAnimation Duration="{Binding ElementName=ellipse, Path=Width, Converter={StaticResource Converter}, Mode=OneTime}"> </DoubleAnimation> </Storyboard> </UserControl.Resources> <Grid x:Name="grid" Background="Red" MouseDown="Grid_MouseDown"> <Ellipse x:Name="ellipse"></Ellipse> </Grid>
UserControl2.язык XAML.в CS:
public partial class UserControl2 : UserControl { public UserControl2() { InitializeComponent(); } private void UserControl_Loaded(object sender, RoutedEventArgs e) { storyboard = this.Resources["Storyboard"] as Storyboard; doubleAnimation = storyboard.Children[0] as DoubleAnimation; NameScope.SetNameScope(storyboard, NameScope.GetNameScope(this)); NameScope.SetNameScope(doubleAnimation, NameScope.GetNameScope(this)); BindingOperations.SetBinding(doubleAnimation, DoubleAnimation.DurationProperty, new Binding("Width") { Converter = new Converter(), ElementName = "ellipse" }); } private void Grid_MouseDown(object sender, MouseButtonEventArgs e) { BindingOperations.GetBindingExpression(doubleAnimation, DoubleAnimation.DurationProperty).UpdateTarget(); } Storyboard storyboard; DoubleAnimation doubleAnimation; }
Конвертер. cs:
class Converter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { MessageBox.Show("Hello World!"); return new System.Windows.Duration(TimeSpan.FromSeconds(1)); } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } }
Что я уже пробовал:
Я попробовал код, который дал внутри описания вопроса, но сообщение "Hello World!" не отображается, когда я нажимаю на сетку в окне.
Kenneth Haugland
Ваша проблема заключается в том, что выражение привязки равно null;
var bd = операции связывания.GetBindingExpression(doubleAnimation, DoubleAnimation.DurationProperty);
If (bd != null) / / сделай что-нибудь
Ziya1995
Я хочу знать, почему привязка имени элемента не работает.