使用控制部件或可视状态管理器,还是两者都有?

时间:2012-09-25 07:57:12

标签: c# wpf custom-controls visualstatemanager

我写了一个自定义控件。我目前有几个控制模板,它们都复制了很多触发器来显示/隐藏东西等等。我试图将这些功能中的一部分移动到控件本身,以便稍微整理一下模板,并且已经阅读了控制部件,和视觉状态管理者。

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

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

但后来我读到了视觉状态管理器,它似乎推断我应该创建一个ExtraInfoVisibility组,并且模板可以定义InfoShownInfoHidden个状态,以及编辑器像Blend可以操作。

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

1 个答案:

答案 0 :(得分:2)

当使用VisualStateManager时,假设您也遵循部件和状态模型。在这种情况下,这个名字真的说明了一切。如果这还不够,那么在Web上关于VisualStateManger的教程中使用已定义的部分以及状态会使它回归到使用状态时不仅部分仍然相关,而且它们变得更加有用,因为它们指定了将由控制以确定状态。有关如何使用的详细信息,请参阅Parts & States model with VisualStateManager (part 3 of 4)

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

如果你想要仔细阅读关于如何在WPF中集成VisualStateManager以及我们已经熟悉的现有技术的问题,我建议您阅读Carole Snyder的The VisualStateManager and Triggers。那篇文章有一个有趣的引用,它帮助我解决了一些我曾经遇到过的问题。

  

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