Кто вызывает VisualStateManager.GoToState за кулисами?
Я новичок в разработке приложений для xaml и windows, так что извините, если этот вопрос может показаться глупым.
Я создал текстовое поле, и в конструкторе я щелкнул его правой кнопкой мыши и выбрал edit template=>edit the copy и поместил его в свой пользовательский словарь.
В шаблоне управления для этого текстового поля я видел визуальные состояния, такие как отключен, сфокусирован и так далее. Я изменил их, запустил мобильное приложение и заметил, что мои изменения работают, как изменение цвета границы, когда текстовое поле сфокусировано.
Но для того, чтобы это работало, кто-то должен позвонить
VisualStateManager.GoToState("Focused")
когда текстовое поле сфокусировано так, кто это вызывает, потому что я не вижу никаких визуальных переходов в шаблоне элемента управления, так как это происходит?
2 ответа
Код в самом элементе управления вызывает VisualStateManager.GoToState(...) .
Когда вы начнете реализовывать свои собственные пользовательские элементы управления, вы можете подписаться на имеющиеся у вас события и переходные состояния на основе вашей собственной логики. Вот пример пользовательского элемента управления с двумя собственными пользовательскими состояниями.
XAML - это скомпилированный язык, и если вы посмотрели очень внимательно, то, что происходит внутри, это то, что класс позади вашего xaml имеет то же пространство имен, что и ваш код xaml.
Это означает (без практической цели), что компиляция вашей программы превращает весь этот XAML в код C# перед тем, как перейти к MSIL и в конечном итоге выполнить как двоичную программу.
Большинство происходящих изменений состояния основаны на событиях, и TextBox, как и все другие пользовательские элементы управления, будет передавать сообщение и прослушивать сообщения. Страница, которая содержит TextBox, вероятно, будет той, которая передает изменение состояния всякий раз, когда один из его дочерних элементов получает фокус, и в качестве хорошего элемента управления TextBox прослушивает это событие и реагирует на него.