gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 11:14:38 25 4
gpt4 key购买 nike

我真的是 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">

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

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com