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

标签 c# .net wpf styles

我对 WPF 还很陌生,正在努力理解一些与样式有关的内容。首先,该样式不会在任何地方抛出任何错误,尽管我仍然不确定它是否完全正确......所以这是我的样式的 XAML;

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

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

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

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:

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

最佳答案

您正在使用绑定(bind)到 UserControl.DataContext.VisibilityDataTrigger,但我相当确定您想要绑定(bind)到 UserControl.Visibility 相反,因此您需要使用不同的绑定(bind)类型。

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

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

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

<Trigger Property="Visibility" Value="Visible">

关于c# - 应用样式以编程方式进行控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13033053/

相关文章:

c# - 如何使用透明度/alpha 在 Canvas 上绘制图像

c# - 为什么我的 C++ 互操作可以在 .Net 4.5 上运行,但不能在 4 上运行

c# - 查找复选框的值

c# - 将 C# 控制台应用扩展为 WPF 应用

c# - WPF:在角度动画之前更改 RotateTransform 中心

c# - 如何修复 xamrian.android 中未绑定(bind)的前缀

c# - 多次检查一个列表包含相同的值

c# - 覆盖对象的虚拟方法

c# - 如何将模式包含在 xml 中

c# - 在 BackgroundWorker 中加载图片