【发布时间】:2011-05-13 06:20:30
【问题描述】:
我刚刚将一个 WPF 项目从 .NET 3.5 转换为 .NET 4.0。
我现在使用 .NET 4.0 DataGrid 控件而不是 WPF Toolkit DataGrid 控件。从功能上讲,一切仍然正常,但我的样式没有按预期应用。
从下面的屏幕截图中可以看出,交替行格式、填充、粗体标题等已停止工作。
之前(WPF 工具包数据网格)
之后(.NET 4.0 DataGrid)
这是我的整个资源字典。
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style x:Key="DataGrid_ColumnHeaderStyle" TargetType="DataGridColumnHeader">
<Setter Property="FontWeight" Value="Bold" />
<Setter Property="TextBlock.TextAlignment" Value="Center" />
<Setter Property="TextBlock.TextWrapping" Value="WrapWithOverflow" />
</Style>
<Style x:Key="DataGrid_CellStyle" TargetType="DataGridCell">
<Setter Property="Padding" Value="5,5,5,5" />
<Setter Property="TextBlock.TextAlignment" Value="Center" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="DataGridCell">
<Border Padding="{TemplateBinding Padding}" Background="{TemplateBinding Background}">
<ContentPresenter />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="DataGrid">
<Setter Property="ColumnHeaderStyle" Value="{StaticResource DataGrid_ColumnHeaderStyle}" />
<Setter Property="CellStyle" Value="{StaticResource DataGrid_CellStyle}" />
<Setter Property="Background" Value="White" />
<Setter Property="AlternatingRowBackground" Value="#F0F0F0" />
<Setter Property="VerticalGridLinesBrush" Value="LightGray" />
<Setter Property="HeadersVisibility" Value="Column" />
<Setter Property="SelectionMode" Value="Single" />
<Setter Property="SelectionUnit" Value="FullRow" />
<Setter Property="GridLinesVisibility" Value="Vertical" />
<Setter Property="AutoGenerateColumns" Value="False" />
<Setter Property="CanUserAddRows" Value="False" />
<Setter Property="CanUserDeleteRows" Value="False" />
<Setter Property="CanUserReorderColumns" Value="True" />
<Setter Property="CanUserResizeColumns" Value="True" />
<Setter Property="CanUserResizeRows" Value="False" />
<Setter Property="CanUserSortColumns" Value="True" />
<Setter Property="IsReadOnly" Value="True" />
<Setter Property="BorderBrush" Value="#DDDDDD" />
<Setter Property="HorizontalGridLinesBrush" Value="#DDDDDD" />
<Setter Property="VerticalGridLinesBrush" Value="#DDDDDD" />
</Style>
<Style x:Key="DataGrid_FixedStyle" TargetType="DataGrid" BasedOn="{StaticResource {x:Type DataGrid}}">
<Setter Property="CanUserReorderColumns" Value="False" />
<Setter Property="CanUserResizeColumns" Value="False" />
<Setter Property="CanUserResizeRows" Value="False" />
<Setter Property="CanUserSortColumns" Value="False" />
</Style>
</ResourceDictionary>
这里是一个用法示例(注意样式设置为“DataGrid_FixedStyle”):
<DataGrid
Style="{StaticResource DataGrid_FixedStyle}"
Grid.Column="0" Foreground="Black"
SelectedIndex="{Binding SelectedParticipantIndex, Mode=TwoWay}"
ItemsSource="{Binding Participants}">
<DataGrid.Columns>
<DataGridTextColumn Foreground="Black" Header="Participant" Binding="{Binding ParticipantId}" />
....
</DataGrid.Columns>
</DataGrid>
注意
为了确保资源字典真正被使用,我将以下设置器添加到<Style TargetType="DataGrid">...</Style>:
<Setter Property="FontSize" Value="24" />
从下面的屏幕截图中可以看出,字体大小非常卡通,因此样式本身绝对不会被忽视。问题是许多设置由于某种原因没有被使用或不起作用。
关于什么可能导致我的风格崩溃的任何理论?
【问题讨论】:
-
我刚刚尝试将您的 ResourceDictionary 的内容放入 Window.Resources 与您的 DataGrid 示例相同的文件中,并且效果很好。您如何包含您的 ResourceDictionary?
-
@Colin,奇怪,不管我把资源字典放在哪里,它都对我不起作用。
-
您是否尝试在基本样式上设置 x:Key 以进行故障排除? 。
-
@Meleak,是的,我确实尝试过。它没有任何区别。请在下面查看我的答案。
标签: wpf xaml datagrid wpftoolkit