2

我写了一个自定义控件。我目前有几个控件模板,它们都复制了很多用于显示/隐藏内容等的触发器。我正在尝试将其中一些功能移动到控件本身中以稍微整理模板,并且一直在阅读控制部分,和视觉状态管理器。

目前,该控件公开了一个属性,例如IsExtraInfoShown。控件模板在此属性上都有自己的触发器来显示/隐藏相应的区域。

在阅读了控制部分之后,这似乎非常适合。所有模板都有一个命名PART_ExtraInfo的,控件会根据需要显示/隐藏它。

但后来我读到了可视化状态管理器,这似乎推断我应该创建一个ExtraInfoVisibility组,并拥有模板可以定义的状态,并且可以操作 Blend 之类的编辑器InfoShownInfoHidden

我应该使用哪个?或者可以同时使用两者?即,我隐藏/显示PART_ExtraInfo它是否存在,如果不是我GotoState()

4

1 回答 1

2

似乎在使用 VisualStateManager 时,假设您也遵循部件和状态模型。在这种情况下,这个名字真的说明了一切。如果这还不够,那么通过 Web 上有关 VisualStateManger 的教程使用已定义的部件和状态会让人明白,这些部件不仅在使用状态时仍然相关,而且它们变得更加有用,因为它们指定了将被使用的元素控制以确定状态。有关如何使用的更多详细信息,请参阅使用 VisualStateManager 的 Parts & States 模型(第 3 部分,共 4 部分)

就设置视觉状态的传统方法(例如使用事件处理程序中的触发器或代码)与部件和状态模型之间的重叠而言,建议似乎是,一旦您使用状态来管理您在状态组中定义的视觉概念,应避免使用触发器或直接设置代码来操纵这些值。

如果您想深入了解有关如何将 VisualStateManager 与我们熟悉的现有技术集成到 WPF 中的问题,我建议您阅读 Carole Snyder 的The VisualStateManager and Triggers。那篇文章有一个有趣的引述,它帮助我解决了我遇到的一些问题。

控件作者应继续为视觉状态定义属性,即使他们使用 VisualStateManager 在其视觉状态之间进行转换。

于 2013-02-17T23:26:05.027 回答