#wpf #wpf-controls
#wpf #wpf-элементы управления
Вопрос:
Вопрос: В jquery мы выбираем определенные элементы с помощью селектора классов, а затем изменяем свойство (цвет, размер, текст и т.д.) Этих элементов. Есть ли у нас что-то подобное в WPF
?
Мотивация: В некоторых случаях мы используем одно и то же TextChanged(...)
событие, скажем, MyTextBoxes_TextChanged(object sender, TextChangedEventArgs e)
для всех TextBoxes
в окне (или Странице) WPF. Но что, если мы хотим использовать одно и то же событие не для всех, а только для определенных TextBoxes
?
Ответ №1:
Способ, которым вы делаете эквивалент в wpf, — это явно задать стиль для элемента.
Вы даете стилю ключ:
<Window.Resources>
<Style x:Key="ExplicitStyle" TargetType="TextBox">
<Setter .....
А затем ссылайтесь на это в конкретном текстовом поле:
<TextBox Style="{StaticResourece ExplicitStyle}"
Стиль является свойством зависимости в WPF, что означает, что он может иметь только одно значение, что означает отсутствие каскадного прямого эквивалента.
Вы можете наследовать один стиль от другого, используя BasedOn
<Style x:Key="ExtendedStyle" BasedOn="ExplicitStyle"
И стиль без ключа или такой же, как тип элемента управления, является стилем по умолчанию, применяемым ко всем элементам управления этого типа.
Есть и другие механизмы, которые вы, возможно, захотите рассмотреть.
Например, события часто являются маршрутизируемыми событиями, которые туннелируют и всплывают. Это означает, что вы можете обрабатывать все необработанные события определенного типа на родительском уровне, например, для окна.
Ресурсы имеют область видимости, поэтому вы можете потенциально объединить в стиле с соответствующим ключом и другими настройками в более низкой области видимости и переопределить родительский элемент.
Также стоит упомянуть datatemplating. Обычно пользовательский интерфейс создается на основе данных, а не создается пользовательский интерфейс и представляет для него модель, как в MVC. И, конечно, пользовательский элемент управления или просто фрагмент xaml, который вы создаете из datatemplate, могут иметь свои собственные стили и значения.
CSS (особенно с миксинами) более гибкий, но wpf выигрывает в других областях.
В качестве отступления. Вы упомянули страницу.
Обычно работают с пользовательскими элементами управления, а не со страницами, если только вы не создаете процесс в стиле «мастера», в котором пользователь циклически выполняет несколько шагов ввода или XBAP. Причина в том, что фрейм и страница потребляют много памяти, в то время как ContentControl и UserControl этого не делают. Вам также не нужно стилизовать кнопки навигации в contentcontrol.