以编程方式应用样式进行控制

时间:2012-10-23 14:42:48

标签: c# .net wpf styles

我是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>

从这里开始,我正在使用一个复选框将一个usercontrol添加到画布'子项中,就像这样;

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上阅读了一些内容,并找到了一些答案,表明这是以编程方式应用样式的方式,将关键字作为样式引用。但是,当我运行它时,usercontrol似乎不会淡入(如样式所示)。

我错过了一些重要的东西吗?或者只是有点傻?

编辑2:

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

1 个答案:

答案 0 :(得分:2)

您正在使用绑定到DataTrigger的{​​{1}},但我相当确定您要绑定到UserControl.DataContext.Visibility,因此您需要使用不同的绑定类型

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

Self

作为替代方案,您可以使用常规<DataTrigger Binding="{Binding Visibility, RelativeSource={RelativeSource Self}}" Value="Visible"> 而不是Trigger,这应该使触发器基于UserControl的属性,而不是尝试通过绑定来查找属性。

DataTrigger