【问题标题】:DataGrid common style isn't being applied for whole DataGridDataGrid 通用样式未应用于整个 DataGrid
【发布时间】: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,请看我更新的问题

标签: c# wpf xaml datagrid


【解决方案1】:

尝试将BasedOn="{StaticResource {x:Type DataGrid}}" 添加到&lt;Style x:Key="DataGridStyleBase" TargetType="{x:Type DataGrid}"&gt;

【讨论】:

  • 不幸的是,它没有帮助:c
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-08
  • 1970-01-01
相关资源
最近更新 更多