1

我是 xaml 和 windows 应用程序开发的新手,如果这个问题看起来很愚蠢,我很抱歉。

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

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

但为了让这个工作有人必须打电话

VisualStateManager.GoToState("Focused")

当文本框聚焦时,谁在调用它,因为我在控件模板中看不到任何视觉转换,所以这是怎么发生的?

4

2 回答 2

1

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

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

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

于 2016-06-18T13:35:59.657 回答
1

XAML 是一种编译语言,如果您仔细观察,会发现在底层发生的事情是,您的 xaml 背后的类与您的 xaml 代码具有相同的命名空间。

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

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

于 2016-04-01T05:10:33.377 回答