WPF 相当于 jQuery 的 class 选择器

WPF equivalent of jQuery's class selector

问题:在jquery, we select certain elements by using class selector中,然后改变一个属性(颜色、大小、文本等)的那些元素。我们在 WPF 有类似的东西吗?

动机:在某些情况下,我们使用相同的 TextChanged(...) 事件,例如,MyTextBoxes_TextChanged(object sender, TextChangedEventArgs e) 用于 WPF TextBoxes 26=](或页面)。但是,如果我们不想对所有人使用同一个事件,而只对某些 TextBoxes 使用同一个事件怎么办?

在 wpf 中进行等效操作的方法是在元素上显式设置样式。

你给一个样式一个键:

<Window.Resources>
     <Style x:Key="ExplicitStyle" TargetType="TextBox">
          <Setter .....

然后在特定的文本框中引用:

 <TextBox Style="{StaticResourece ExplicitStyle}"

样式是 WPF 中的一种依赖项 属性,这意味着它只能有一个值,这意味着没有级联的直接等价物。

您可以使用 BasedOn

从另一种样式继承一种样式
 <Style x:Key="ExtendedStyle" BasedOn="ExplicitStyle"

并且没有键或者与控件类型相同的样式是应用于该类型所有控件的默认样式。

您可能还需要考虑其他机制。

例如,事件通常是隧道和冒泡的路由事件。这意味着您可以在父级别处理特定类型的所有未处理事件,例如 window.

资源具有范围,因此您可以在较低范围内合并具有匹配键和不同设置的样式并覆盖父级。

还值得一提的是数据模板。基于数据构建 UI 而不是创建 UI 并像使用 MVC 那样向其呈现模型是很常见的。 当然,您从数据模板创建的用户控件或只是 xaml 的一部分可以设置自己的样式和值。

CSS(尤其是混合)更灵活,但 wpf 在其他方面得分。

顺便说一句。 你提到佩奇。

通常使用 UserControls 而不是 Page(s),除非您正在构建一个“向导”风格的进程,用户在其中循环执行多个输入步骤或 XBAP。原因是 Frame 和 Page 会产生内存开销,而 ContentControl 和 UserControl 不会。您也不必改变内容控件上的导航按钮的样式。