谁在幕后调用VisualStateManager.GoToState?

时间:2016-04-01 04:58:47

标签: winrt-xaml win-universal-app windows-8.1-universal

我是xaml和windows app dev的新手,很抱歉,如果这个问题看起来很愚蠢。

我创建了一个文本框,在设计器中我右键单击它并选择了编辑模板=>编辑副本并将其放入我的自定义词典中。

在这个文本框的控件模板中,我看到了视觉状态,如禁用,聚焦等。我修改了它们并运行移动应用程序并观察到我的更改就像在文本框聚焦时更改边框颜色一样。

但为了让这个工作,有人必须致电

VisualStateManager.GoToState("Focused")

当文本框被聚焦时,是谁调用了这个,因为我没有在控件模板中看到任何视觉转换,所以这是怎么回事?

2 个答案:

答案 0 :(得分:1)

XAML是一种编译语言,如果你看起来更加接近,那么你的xaml背后的类与你的xaml代码具有相同的命名空间。

这意味着(没有实际意义)编译程序会将所有XAML转换为C#代码,然后转到MSIL并最终作为二进制程序执行。

发生的大多数状态更改都是基于事件的,而TextBox与所有其他用户控件一样,将传输消息并侦听消息。包含TextBox的页面可能是在其中一个孩子获得焦点时传输状态更改的页面,并且作为一个好的控件,TextBox会侦听此事件并对其作出反应。

答案 1 :(得分:1)

控件本身的代码调用VisualStateManager.GoToState(...)。

当您开始实现自己的自定义控件时,您可以订阅可用的事件并根据您自己的逻辑转换状态。以下是具有自己的两个自定义状态的自定义控件的示例。

https://github.com/xyzzer/WinRTXamlToolkit/blob/master/WinRTXamlToolkit/Controls/WatermarkTextBox/WatermarkTextBox.cs