WPF,触发器,样式范围和声明性编程模型问题

时间:2010-11-26 22:06:18

标签: wpf

TL; DR Xaml对我来说感觉不透明,为什么在一个案例中从动画中删除TargetName会失败并在另一个案例中使用另一个完全相同(复制和粘贴)的触发器声明?

This question中,我的问题通过将触发器移动到样式并将样式应用于文本框来解决。从示例中,您可以看到故事板的TargetName属性设置为其中一个文本框的名称。

在尝试完成这项工作时,我还将触发器放在Grid.Triggers部分并删除了TargetName属性。这导致抛出异常。

解决方案涉及将其置于样式中,然后删除TargetName属性setter。样式未命名,但应用于文本框。在这种情况下,如果未设置TargetName,则无效。

所以这就是问题所在。我花了一些时间来让它工作,重命名TargetName似乎是明智的,因为我希望它适用于几个文本框,但是当我把它放在Grid.Triggers部分时我试过了。为什么没有那个工作,为什么它以一种风格工作?更重要的是,我如何利用这些知识在以后解决类似的问题?我认为这是一个棘手的问题,Xaml目前对我来说似乎很不透明。

1 个答案:

答案 0 :(得分:0)

Storyboard.TargetName不是关于应用行为;它是行为执行的一部分。样式通常是关于在不同的实例中应用预定义的行为,这些实例可能包括故事板和可能的Storyboard.TargetName。

此外,样式通常可以作为引用资源内联或外部。它可以取决于样式的使用方式,即......对于特定控件来说是一次性的还是我们想要在整个应用程序中传播的东西?

预先了解这些概念可以防止以后进行数小时的故障排除。 WPF及其概念周围有很多很棒的articles,还有很多很棒的books