WPF数据网格样式

时间:2010-02-16 20:07:25

标签: wpf datagrid styles

我想为WPF数据网格设置样式,这看起来非常简单。据我所知,我必须有如下代码:

<Style x:Key="DataGridColumnHeaderStyle" TargetType="{x:Type Custom:DataGridColumnHeader}"  >
<Setter Property="Background" Value="#88800080" />
    <Setter Property="Foreground" Value="White" /> 
</Style>

但我的问题是..我在哪里放置此代码,如何让datagrid知道使用上面的样式?

此致 小号

4 个答案:

答案 0 :(得分:2)

将它放在xaml(本地或全局)的资源中。最简单的方法是将它放在当前xaml文件的本地资源中:

<Page Name="SomeName"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Page.Resources>
    <Style x:Key="DataGridColumnHeaderStyle" TargetType="{x:Type Custom:DataGridColumnHeader}"  >
      <Setter Property="Background" Value="#88800080" />
      <Setter Property="Foreground" Value="White" /> 
   </Style>
  </Page.Resources>
<!-- The rest of the xaml -->
</Page>

答案 1 :(得分:1)

放置样式的最佳位置是在App.xaml中引用的资源字典中。

资源字典(本例中为“StyleResources.xaml”):

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Style x:Key="TextBlockRightAlign" TargetType="TextBlock">
        <Setter Property="HorizontalAlignment" Value="Right" />
    </Style>
    <Style x:Key="TextBlockTitle" TargetType="TextBlock">
        <Setter Property="FontSize" Value="20" />
        <Setter Property="FontWeight" Value="Bold" />
    </Style>
</ResourceDictionary>

引用App.xaml中的样式字典:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="StyleResources.xaml"/>
        </ResourceDictionary.MergedDictionaries>
        <ValueConverters:PriceConverter x:Key="PriceConverter"/>
    </ResourceDictionary>
</Application.Resources>

在数据网格中使用定义(这里的列格式,但也适用于标题):

<data:DataGridTextColumn Header="Charge" Width="100" 
       Binding="{Binding Charge, Mode=TwoWay, Converter={StaticResource PriceConverter}}"
       ElementStyle="{StaticResource TextBlockRightAlign}" />

请注意,单元格内的元素是TextBlock,因此您可以使用目标类型为TextBlock的样式。

答案 2 :(得分:1)

至于“未找到Type DataGridColumnHeader”:您需要第二个xml命名空间条目,因为DataGridColumnHeader位于System.Windows.Controls.Primitives命名空间中。你需要像

这样的东西
xmlns:dg="clr-namespace:Microsoft.Windows.Controls.Primitives;assembly=WPFToolkit"

然后引用您的样式中的新命名空间,例如

<Style x:Key="DataGridColumnHeaderStyle" TargetType="{x:Type dg:DataGridColumnHeader}" >

答案 3 :(得分:0)

样式通常是:

<UserControl.Resources>
    <Style x:Key="DataGridColumnHeaderStyle" TargetType="{x:Type Custom:DataGridColumnHeader}"  >
       <Setter Property="Background" Value="#88800080" />
       <Setter Property="Foreground" Value="White" /> 
    </Style>
</UserControl.Resources>

如果不在UserControl中,请使用适当的容器,您可以使用“Window”或您所在的任何容器。

您还需要在数据网格中引用它:

<Custom:DataGrid ColumnHeaderStyle="{StaticResource DataGridColumnHeaderStyle}"/>