Кто вызывает VisualStateManager.GoToState за кулисами?

Я новичок в разработке приложений для xaml и windows, так что извините, если этот вопрос может показаться глупым.

Я создал текстовое поле, и в конструкторе я щелкнул его правой кнопкой мыши и выбрал edit template=>edit the copy и поместил его в свой пользовательский словарь.

В шаблоне управления для этого текстового поля я видел визуальные состояния, такие как отключен, сфокусирован и так далее. Я изменил их, запустил мобильное приложение и заметил, что мои изменения работают, как изменение цвета границы, когда текстовое поле сфокусировано.

Но для того, чтобы это работало, кто-то должен позвонить

VisualStateManager.GoToState("Focused")

когда текстовое поле сфокусировано так, кто это вызывает, потому что я не вижу никаких визуальных переходов в шаблоне элемента управления, так как это происходит?

2 ответа

Решение

Код в самом элементе управления вызывает VisualStateManager.GoToState(...) .

Когда вы начнете реализовывать свои собственные пользовательские элементы управления, вы можете подписаться на имеющиеся у вас события и переходные состояния на основе вашей собственной логики. Вот пример пользовательского элемента управления с двумя собственными пользовательскими состояниями.

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

XAML - это скомпилированный язык, и если вы посмотрели очень внимательно, то, что происходит внутри, это то, что класс позади вашего xaml имеет то же пространство имен, что и ваш код xaml.

Это означает (без практической цели), что компиляция вашей программы превращает весь этот XAML в код C# перед тем, как перейти к MSIL и в конечном итоге выполнить как двоичную программу.

Большинство происходящих изменений состояния основаны на событиях, и TextBox, как и все другие пользовательские элементы управления, будет передавать сообщение и прослушивать сообщения. Страница, которая содержит TextBox, вероятно, будет той, которая передает изменение состояния всякий раз, когда один из его дочерних элементов получает фокус, и в качестве хорошего элемента управления TextBox прослушивает это событие и реагирует на него.

Другие вопросы по тегам