首页 > 解决方案 > WPF动画边距绑定

问题描述

有没有办法以动画使 UserControl 从左侧滑入的方式将厚度动画绑定到 UserControls 父容器宽度?

我知道 Width 是一个 int 并且目标属性是一个不同类型的边距,我知道你应该使用某种 ValueConverter 但我的似乎不能正常工作。

下面是我很穷,但最好的尝试。这没有用。有没有更好更简单的方法来做到这一点?最好不需要转换器和纯 xaml 解决方案。

<Window>
    <Grid> <!-- Main Window Container -->
        <UserControl x:Name="ParentControl" Content="{Binding Window}" />
    </Grid>
</Window>

<UserControl>
    <UserControl.Triggers>
        <EventTrigger RoutedEvent="Loaded">
            <BeginStoryboard>
                <Storyboard>
                    <ThicknessAnimation Storyboard.TargetName="ucDashboardView" 
                                    Storyboard.TargetProperty="Margin" 
                                    From="{Binding Width, ElementName=ParentControl, 
                                    Converter=cnv:MarginWidthConverter}"  
                                    To="0" Duration="0:0:1"/>
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </UserControl.Triggers>

    <!-- Just so we can see something right now -->
    <Grid Margin="50" Background="Gainsboro"/>
</UserControl>

然后是 C# 转换器

public class MarginWidthConverter : BaseValueConverter<MarginWidthConverter>
{
    public override object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return new Thickness(-(int)value, 0, (int)value, 0);
    }

    public override object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

标签: wpfanimationdata-binding

解决方案


推荐阅读