Эквивалент WPF селектора классов jQuery

#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.