Ziya1995 Ответов: 0

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

Я хочу знать, почему привязка имени элемента не работает.

0 Ответов