【问题标题】:How to set Style to WPFToolkit DataGrid?如何将样式设置为 WPFToolkit DataGrid?
【发布时间】:2011-09-07 11:26:02
【问题描述】:

我是 WPF 新手,正在使用 C# 和 .NET3.5 进行开发。我有一个 WPFToolkit 的 DataGrid 添加到我的窗口中。我无法弄清楚如何将样式设置为列标题和行?行是动态添加的。

        <my:datagrid name="myGrid" xmlns:my="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit" itemssource="{Binding }" autogeneratecolumns="False">
                 SelectionMode="Extended" SelectionUnit="FullRow" CanUserReorderColumns="False" 
                 ColumnHeaderHeight="42" Background="#FFF7F7F7" BorderBrush="Transparent" 
                 HorizontalGridLinesBrush="#FFEAEAEA" VerticalGridLinesBrush="#FFEAEAEA" 
                 HeadersVisibility="Column" RowHeaderWidth="0" HorizontalContentAlignment="Center" 
                 VerticalContentAlignment="Center" ClipboardCopyMode="None" MinRowHeight="28" 
                 Rowremoved="#FFF7F7F7" RowDetailsVisibilityMode="Visible" RowHeight="28" 
                 DataContextChanged="serverGrid_DataContextChanged">
        <my:datagrid.columns>
            <my:datagridtextcolumn header="Enabled" width="120" binding="{Binding Path=Name}" />
            <my:datagridtextcolumn header="Enabled" width="70" binding="{Binding Path=Country}" />
            <my:datagridtextcolumn header="Enabled" width="100" binding="{Binding Path=Description}" />
        </my:datagrid.columns>

    </my:datagrid>

在资源中添加了样式代码:

    <!-- DataGridColumnHeader-->
    <Style x:Key="ColumnHeaderStyle" TargetType="{x:Type Thumb}">
        <setter property="Background" value="#9DCFD0" />
        <setter property="FontFamily" value="Arial Rounded MT" />
        <setter property="FontSize" value="14" />
        <setter property="FontWeight" value="Bold" />
        <setter property="Foreground" value="#00545B" />
        <setter property="VerticalContentAlignment" value="Center" />
        <setter property="HorizontalContentAlignment" value="Center" />
    </Style>

在 Style 的 TargetType 中,无法设置为 my:DataGridColumnHeader 或仅设置为 DataGridColumnHeader。它说“......未找到”。在my:DataGridTextColumn 我猜HeaderStyle 是设置样式的属性。但我能够定义相同的样式。

另外如何为动态添加的行设置样式?我哪里错了? 非常感谢任何帮助。

【问题讨论】:

    标签: c# wpf xaml wpfdatagrid


    【解决方案1】:

    你可以这样做:

    首先是标题的命名空间:

    xmlns:Custom="http://schemas.microsoft.com/wpf/2008/toolkit"
    

    那么这就是风格:

    <Style x:Key="DataGridColumnHeaderStyle" TargetType="{x:Type Custom:DataGridColumnHeader}">
            <Setter Property="HorizontalAlignment" Value="Center"></Setter>
            <Setter Property="Foreground" Value="#654b24"></Setter>
            <Setter Property="FontWeight" Value="bold"></Setter>
            <Setter Property="Height" Value="30"></Setter>
            <Setter Property="Background">
                <Setter.Value>
                    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                        <GradientStop Color="#f7f3de" Offset="0.1"/>
                        <GradientStop Color="#Fcfcfc" Offset="1"/>
                    </LinearGradientBrush>
                </Setter.Value>
            </Setter>
        </Style>
    

    【讨论】:

    • 在运行时使用这个,而 Show(),我在调试中得到以下错误“'DataGridColumnHeader' TargetType 与元素'DataGridCell'的类型不匹配。”。如果没有 Debug,它只会退出并且不显示任何内容。
    • 已将数据网格的CellStyle 设置为DataGridColumnHeaderStyle?它们显然是两种不同的东西。
    • 但 TargetType 即 DataGridColumnHeader 不可访问。对于 DataGrid,我只能访问我的:DataGrid、DataGridCell、DataGridcellsPanel、DataGridHeaderBorder 和 DataRow - 通过 typtin "
    【解决方案2】:

    你可以关注these tutorials,一共有四个,涵盖了DataGrid造型的大部分方面。

    链接的文章是该系列的第二篇,涵盖了大部分基础知识。

    【讨论】:

      【解决方案3】:

      您看不到my:DataGridColumnHeader 的可能原因是它位于System.Windows.Controls.Primitives 命名空间中。 my 也代表这个命名空间吗?

      使用

       xmlns:Primitives="clr-namespace:Microsoft.Windows.Controls.Primitives;assembly=WPFToolkit"
      

      改为。

      编辑

      然后将 DataGridColumnHeader 称为

       <Style TargetType="{x:Type Primitives:DataGridColumnHeader}">
           ....
       </Style>
      

      记住不要给它任何密钥,以便适用于所有标题。

      【讨论】:

      • "my" 在我的 DataGrid 初始化中设置:
      • 对于 DataGrid,我只能访问我的:DataGrid、DataGridCell、DataGridcellsPanel、DataGridHeaderBorder 和 DataRow。我尝试将 TargetType 设置为 DataCell,然后为所有行提供样式和标题,仅在鼠标悬停时提供。我想要 Col Headers & Rows 的不同样式。
      猜你喜欢
      • 1970-01-01
      • 2012-08-10
      • 2010-09-18
      • 2011-12-18
      • 1970-01-01
      • 1970-01-01
      • 2011-03-17
      • 2014-06-13
      • 1970-01-01
      相关资源
      最近更新 更多