css - XAML 样式中是否有像 CSS 中那样的元素选择器?
问题描述
在 CSS 中,您可以这样做:
#menu, #nav-bar, #data-grid {
background: autumn-red;
}
XAML 样式中是否有类似的东西?
解决方案
这是我能想到的最接近的 - 虽然它不是“选择器”,但它仍然允许您为多个元素实例定义一次样式:
假设您的 Menu、ToolBar 和 DataGrid WPF 组件都有一个公共的基本类型,该基本类型是或继承自 Control,您可以在容器的资源中定义具有特定 x:Key 的单个样式,例如 CommonStyle,并将 TargetType 设置为公共组件祖先类型。
例如,该样式可以具有用于背景的 Setter,和/或前景,或 Control 的 FontSize 属性。
然后,您可以使用 Style="{StaticResource CommonStyle}" 从每个实例中指向该样式。
需要注意的是,某些类型实现(实际上是它们的 ControlTemplates)根本不使用在公共祖先类型上定义的属性值。例如,DataGrid 不考虑行的背景(但对于行之间的小分隔符和行下的区域,如果空间较大 - 将 Height="200" 添加到其实例以查看),工具栏不'不使用 Foreground,但所有 DataGrid、Menu 和 ToolBar 都使用 FontSize。
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp1"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.Resources>
<Style x:Key="CommonStyle" TargetType="Control">
<Setter Property="Background" Value="Yellow"/>
<Setter Property="Foreground" Value="Red"/>
<Setter Property="FontSize" Value="30"/>
</Style>
</Window.Resources>
<StackPanel>
<Menu Style="{StaticResource CommonStyle}">
<MenuItem Header="Test"/>
</Menu>
<ToolBar Style="{StaticResource CommonStyle}">
<Button Content="Test"/>
</ToolBar>
<DataGrid Style="{StaticResource CommonStyle}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding}" Header="Item"/>
</DataGrid.Columns>
<sys:String>Test</sys:String>
</DataGrid>
</StackPanel>
</Window>
我希望它有所帮助。