2

我真的是 WPF 的新手,我很难理解一些与样式有关的东西。首先,该样式不会在任何地方抛出任何错误,尽管我仍然不确定它是否完全正确......所以这是我的样式的 XAML;

编辑:样式应该允许我的自定义用户控件使用 Storyboard 和 DoubleAnimation 淡入

<Application.Resources>
    <Style TargetType="{x:Type UserControl}" x:Key="UCStyle">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Visibility}" Value="Visible">
                <DataTrigger.EnterActions>
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetProperty="UserControl.Opacity" From="0.0" To="1.0" Duration="0:0:3">

                            </DoubleAnimation>
                        </Storyboard>
                    </BeginStoryboard>
                </DataTrigger.EnterActions>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Application.Resources>

从这里开始,我使用复选框将用户控件添加到画布的子项中,如下所示;

private void CheckBox_Checked(object sender, RoutedEventArgs e)
    {
        UserControlLibrary.UserControl1 userControl = new UserControlLibrary.UserControl1();
        userControl.Style = Resources["UCStyle"] as Style;
        canvas1.Children.Add(userControl);
    }

我在 SO 上阅读了一圈,发现一些答案表明这是您以编程方式应用样式的方式,将密钥作为样式引用。但是,当我运行它时,用户控件似乎没有淡入(正如样式所暗示的那样)。

我在这里错过了什么重要的东西吗?或者只是有点傻?

编辑2:

我已经修改了我的复选框选中事件以在将其添加到画布后将可见性设置为隐藏,以及一个带有单击事件的新按钮将可见性设置为可见,但遗憾的是它并没有解决我的问题。

4

1 回答 1

2

您正在使用DataTrigger绑定到的 a UserControl.DataContext.Visibility,但是我相当确定您想要绑定到UserControl.Visibility,因此您需要使用不同的绑定类型。

默认情况下,所有绑定都引用DataContext,因此要引用 以外的其他DataContext内容,您需要为绑定指定不同的源,例如RelativeSource绑定到Self

<DataTrigger Binding="{Binding Visibility, RelativeSource={RelativeSource Self}}" Value="Visible">

作为替代方案,您可以使用常规Trigger而不是 a DataTrigger,它应该基于 UserControl 的属性触发,而不是尝试通过绑定查找属性。

<Trigger Property="Visibility" Value="Visible">
于 2012-10-23T14:54:01.633 回答