解释如何将VisualStateManager用于初学者

时间:2014-05-14 14:29:43

标签: wpf xaml windows-8 microsoft-metro

我知道Xaml / WPF很少。我尝试在Windows 8都市应用中为Style设计一个自定义Button,其中有一个洋红色背景,按下后,有一个蓝色背景。我明白我需要使用{ {1}}但我无法在线找到任何对该主题知之甚少的人有意义的事情。有很多假设的知识。这是我到目前为止所得到的:

VisualStateManager

这段代码可能非常错误,但正如我所说,我一直试图修补一些我不能理解的信息来创造结果。

感谢您的时间

2 个答案:

答案 0 :(得分:6)

作为一名初学者,不要试图手工编写它。 WPF(Triggers)的原始机制非常简单,但是在新的XAML平台上用作替代品的VSM更加冗长,专门设计用于设计工具。

为了节省很多麻烦,只需在Blend中进行编辑,然后您可以查看它生成的XAML,如果您想要了解更多将来手动编辑的细节。 Blend体验非常简单 - 在“状态”面板中选择要编辑的状态,您将看到它的预览。选择该状态后所做的任何更改都将作为故事板应用于该州。

答案 1 :(得分:3)

我相信这里有很多人,花时间写一个解释如何创建视觉状态和他们的目的。我仍然需要花一点时间来解释一些关于VSM的事情,我认为这些事情在文档中没有提到,但是很了解:

您已经知道可以在控件的不同图形表示之间进行更改。这些状态在范围内是独占的(VisualStateGroup)。含义您可以定义具有三个状态f.e的组。常规,按下和MouseOver。组中只能在给定时间应用一个状态,但您可以将这些状态与可写状态或只读状态等其他组合用。

如何正确使用它们:如果没有特殊情况,那么在你的控件中你只需要一个方法UpdateStates(bool useTransitions)即可。您检查内部控制状态,如

if (this.IsReadOnly) -> VisualStateManager.GoToState("ReadOnlyState",...

每当您更改...井状态时,都会调用UpdateStates方法。这意味着你将拥有DependencyProperties和每个(相关的)DPChangeHandler(在寄存器调用中)。在ChangeHandler内部(以及需要的地方),您只需调用UpdateStates方法,让您的控件决定激活哪个状态。

这至少是MS在他们的控制中如何做到的。

希望能帮到你一点点。 :)