silverlight - 在 Silverlight 中更改 Datagrid 标题的背景颜色

标签 silverlight datagrid silverlight-2.0

我想在 Silverlight 中更改 Datagrid 标题的背景颜色。

最佳答案

尽管 DataGrid 不公开 Header Background 属性,但它确实具有 ColumnHeaderStyle 的属性。使用 DaniCE 之前为单个列建议的技术,我们可以替换所有标题列的标题模板,包括右侧的空白区域。替换标题的整个模板的缺点是我们丢失了默认标题模板中存在的排序箭头和分隔符。幸运的是,我们可以使用 template browser提取正在使用的默认模板,然后修改它的副本。

在这里,我拼凑了一个快速示例,该示例将在保留分隔符和排序的同时将列标题的背景更改为浅蓝色。查看 template browser 中的默认 DataGridColumnHeader 模板看看当鼠标悬停在 ColumnHeader 上时如何处理修改背景。

DataGrid Header Background

<data:DataGrid x:Name="grid">
    <data:DataGrid.ColumnHeaderStyle>
        <Style 
            xmlns:primitives="clr-namespace:System.Windows.Controls.Primitives;assembly=System.Windows.Controls.Data" 
            xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows"
            TargetType="primitives:DataGridColumnHeader" >
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="primitives:DataGridColumnHeader">
                        <Grid Name="Root">
                            <vsm:VisualStateManager.VisualStateGroups>
                                <vsm:VisualStateGroup x:Name="SortStates" >
                                    <vsm:VisualStateGroup.Transitions>
                                        <vsm:VisualTransition GeneratedDuration="00:00:0.1" />
                                    </vsm:VisualStateGroup.Transitions>
                                    <vsm:VisualState x:Name="Unsorted" />
                                    <vsm:VisualState x:Name="SortAscending">
                                        <Storyboard>
                                            <DoubleAnimation Storyboard.TargetName="SortIcon" Storyboard.TargetProperty="Opacity" Duration="0" To="1.0" />
                                        </Storyboard>
                                    </vsm:VisualState>
                                    <vsm:VisualState x:Name="SortDescending">
                                        <Storyboard>
                                            <DoubleAnimation Storyboard.TargetName="SortIcon" Storyboard.TargetProperty="Opacity" Duration="0" To="1.0" />
                                            <DoubleAnimation Storyboard.TargetName="SortIconTransform" Storyboard.TargetProperty="ScaleY" Duration="0" To="-.9" />
                                        </Storyboard>
                                    </vsm:VisualState>
                                </vsm:VisualStateGroup>
                            </vsm:VisualStateManager.VisualStateGroups>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="*" />
                                <RowDefinition Height="*" />
                                <RowDefinition Height="Auto" />
                            </Grid.RowDefinitions>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto" />
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="Auto" />
                            </Grid.ColumnDefinitions>
                            <Rectangle x:Name="BackgroundRectangle" Stretch="Fill" Fill="LightBlue" Grid.ColumnSpan="2" Grid.RowSpan="2"  />
                            <ContentPresenter Grid.RowSpan="2" Content="{TemplateBinding Content}" Cursor="{TemplateBinding Cursor}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Margin="{TemplateBinding Padding}" />
                            <Rectangle Name="VerticalSeparator" Grid.RowSpan="2" Grid.Column="2" Width="1" VerticalAlignment="Stretch" Fill="{TemplateBinding SeparatorBrush}" Visibility="{TemplateBinding SeparatorVisibility}" />
                            <Path Grid.RowSpan="2" Name="SortIcon" RenderTransformOrigin=".5,.5" HorizontalAlignment="Left" VerticalAlignment="Center" Opacity="0" Grid.Column="1" Stretch="Uniform" Width="8" Data="F1 M -5.215,6.099L 5.215,6.099L 0,0L -5.215,6.099 Z ">
                                <Path.Fill>
                                    <SolidColorBrush Color="#FF444444" />
                                </Path.Fill>
                                <Path.RenderTransform>
                                    <TransformGroup>
                                        <ScaleTransform x:Name="SortIconTransform" ScaleX=".9" ScaleY=".9"  />
                                    </TransformGroup>
                                </Path.RenderTransform>
                            </Path>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </data:DataGrid.ColumnHeaderStyle>
</data:DataGrid>

希望这可以帮助!

关于silverlight - 在 Silverlight 中更改 Datagrid 标题的背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/325654/

相关文章:

vb.net - Silverlight DataGrid 控件 - 如何停止对列进行排序?

c# - WPF DataGrid 移动到最后选定的行而不突出显示最近单击的行

c# - Silverlight 3 - Canvas 上矩形的数据绑定(bind)位置

silverlight - 如何通过ID获取Silverlight TreeViewItem?

wpf - WPF WebBrowser 中的 Silverlight 应用程序?

uwp - 更改列标题背景 DataGrid UWP

silverlight - Silverlight 中的依赖属性

Javascript/Silverlight 代理双加载延迟

c# - Silverlight:如何使用 System.Net.WebClient 忽略(缺少)crossdomain.xml?

c# - WPF 最后一列通过 DataGrid 延伸