如何做数据网格的样式?

时间:2012-04-26 01:06:39

标签: wpf xaml mvvm wpfdatagrid wpftoolkit

这里我想给网格行添加白色和灰色的替代颜色。我做了很多尝试,但我不能做网格样式。代码在这里

<Style TargetType="{x:Type wpftoolkit:DataGrid}">
    <Setter Property="Margin" Value="0" />
    <Setter Property="BorderBrush" Value="#A6A6A6" />
    <Setter Property="BorderThickness" Value="0,1,0,0"/>
    <Setter Property="Background" Value="{StaticResource GridBgBrush}" />
    <Setter Property="RowBackground" Value="White" />
    <Setter Property="AlternatingRowBackground" Value="#FFF3F6FA" />
    <Setter Property="GridLinesVisibility" Value="Horizontal" />
    <Setter Property="HorizontalGridLinesBrush" Value="Transparent" />
    <Setter Property="RowHeaderWidth" Value="0" />
</Style>

这里StaticResource GridBgBrush在此文件的前面定义为`

请提供适当的解决方案。谢谢。

2 个答案:

答案 0 :(得分:0)

确保您的样式在XAML文件的资源部分中定义(在GridBgBrush之后,以便它可以引用它),或者在应用程序的某个ResourceDictionary中定义,以便可以从任何地方访问它。没有看到更多,我无法告诉你问题的来源。这是定义你的风格的正确方法,如果你有兴趣看到它,我有几个例子可以正常工作。

如果您不知道,另外需要注意的是DataGrid(以及DatePicker)是否已引入WPF v4.0。如果您可以定位该版本,这使得WPF工具包(至少出于DataGrid的目的)是不必要的。在说完之后,我想如果你不知道你使用的是另一个造型,那么你的风格就不会有效了。

<XmlDataProvider x:Key="myData" Source="Data.xml" IsAsynchronous="True" />
<Style TargetType="{x:Type DataGrid}" x:Key="myStyle">
    <Setter Property="AlternatingRowBackground" Value="Red"/>
</Style>

<Grid>
<DataGrid ItemsSource="{Binding Source={StaticResource myData}, XPath=persons/person}" AutoGenerateColumns="False" Style="{StaticResource myStyle}">
        <DataGrid.Columns>
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding XPath=firstname}" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding XPath=lastname}" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>
</Grid>

答案 1 :(得分:0)

您还需要设置AlternationCount属性。