【发布时间】:2020-10-27 15:50:22
【问题描述】:
我希望我的所有 DataGrid 都具有一种共同的风格,但我没有成功。我有单独的 .xaml 文件(DataGrid.xaml),但只有 DataGridColumnHeaderStyleBase 正确应用,但 DataGridStyleBase 没有。
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/AnalyticalReporting.UI;component/Themes/DataGrid.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
用法:
<DataGrid x:Name="Grid"
ColumnHeaderStyle="{StaticResource DataGridColumnHeaderStyleBase}"
Style="{StaticResource DataGridStyleBase}">
<DataGrid.Columns>
<DataGridTextColumn Header="" Binding="{Binding Path=Title}" Width="238" FontSize="10" CanUserSort="False" IsReadOnly="True" >
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="TextWrapping" Value="Wrap"/>
</Style>
</DataGridTextColumn.ElementStyle>
///etc.
</DataGrid>
DataGrid.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style x:Key="DataGridColumnHeaderStyleBase" TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="Background" Value="#EFF5FD" />
<Setter Property="BorderBrush" Value="DarkGray"/>
<Setter Property="BorderThickness" Value="0.5"/>
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock TextWrapping="Wrap" FontSize="10" Text="{Binding}" Padding="6"></TextBlock>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="DataGridStyleBase" TargetType="{x:Type DataGrid}">
<Setter Property="RowBackground" Value="Red"></Setter>
<Setter Property="AlternatingRowBackground" Value="RosyBrown"></Setter>
<Setter Property="GridLinesVisibility" Value="All"></Setter>
<Setter Property="VerticalGridLinesBrush" Value="#B3B8BE"></Setter>
<Setter Property="CanUserReorderColumns" Value="False"/>
<Setter Property="CanUserResizeColumns" Value="False"/>
<Setter Property="AutoGenerateColumns" Value="False"/>
<Setter Property="IsReadOnly" Value="False"/>
<Setter Property="IsHitTestVisible" Value="False"/>
<Setter Property="HorizontalGridLinesBrush" Value="DarkGray"/>
</Style>
</ResourceDictionary>
我的问题是:如何同时应用这两种样式(对于整个 DataGrid 和 DataGridColumns)?
更新:
如果我明确应用样式
<DataGrid x:Name="Grid"
ColumnHeaderStyle="{StaticResource DataGridColumnHeaderStyleBase}"
VerticalGridLinesBrush="#B3B8BE"
GridLinesVisibility="All"
CanUserReorderColumns="False"
CanUserResizeColumns="False"
AutoGenerateColumns="False"
IsReadOnly="True"
IsHitTestVisible="False"
HorizontalGridLinesBrush="DarkGray"
RowBackground="#FFFFFF" AlternatingRowBackground="#EFF5FD">
但如果我改为应用 DataGridStyleBase
<DataGrid x:Name="Grid"
ColumnHeaderStyle="{StaticResource DataGridColumnHeaderStyleBase}"
Style="{StaticResource DataGridStyleBase}">
我会得到这个:
我们可以看到 DataGridColumnHeaderStyleBase 已应用但 DataGridStyleBase 未应用。完全没有错误。
【问题讨论】:
-
为什么不应用
DataGridStyleBase?如果Style无法解析,您将收到错误消息。那么你的情况会怎样呢? -
@mm8,请看我更新的问题