首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataGridColumnHeader风格的问题

DataGridColumnHeader风格的问题
EN

Stack Overflow用户
提问于 2017-08-28 17:50:38
回答 1查看 1.2K关注 0票数 0

试图为我的数据栏标题设置样式时,我遇到了两个问题。

我想要的东西,:我希望我的标题被写在一个边框中,边框被画出来,并且有一个边距。见图:

我得到了什么:我发现边框是在两个标头之间画的,加上我无法摆脱抓地力的阴影(白色抓地力,灰色阴影),正如你在图片中看到的那样

以下是标题的样式:

代码语言:javascript
复制
<Style TargetType="{x:Type DataGridColumnHeader}">
    <Setter Property="VerticalContentAlignment" Value="Center" />
    <Setter Property="Height" Value="30" />
    <Setter Property="SeparatorBrush" Value="{StaticResource ScbWhite}" />
    <Setter Property="FontWeight" Value="Bold" />
    <Setter Property="Foreground" Value="{StaticResource ScbBlue1}"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
                <Grid Margin="{TemplateBinding Padding}">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*" />
                        <ColumnDefinition Width="Auto" />
                    </Grid.ColumnDefinitions>
                    <Border x:Name="columnHeaderBorder"
                            TextBlock.FontWeight="Bold"
                            TextBlock.Foreground="{StaticResource ScbBlue1}"
                            BorderThickness="2"
                            BorderBrush="{StaticResource ScbBlue1}"
                            Background="{StaticResource ScbWhite}"
                            Width="{TemplateBinding Width}"
                            Margin="3,3,3,3"
                            Padding="3,0,3,0">
                        <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                          VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                          SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
                    </Border>
                    <!--BorderBrush="{Binding VerticalGridLinesBrush, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}"-->
                    <Thumb x:Name="PART_RightHeaderGripper" Grid.Column="1"
                           HorizontalAlignment="Right"
                           Width="6" BorderThickness="0"
                           BorderBrush="{StaticResource ScbWhite}"
                           Background="{StaticResource ScbWhite}"
                           Cursor="SizeWE">
                        <Thumb.BitmapEffect>
                            <DropShadowBitmapEffect Color="Transparent" Opacity="0"/>
                        </Thumb.BitmapEffect>
                    </Thumb>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

拜托,我该怎么做才能得到我想要的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-28 18:39:23

DataGrid添加空列标题以填充其他列不覆盖全宽度的情况。该标头具有null内容。我添加了一个ControlTemplate触发器,以使没有内容的标题边框透明。

为了改变拇指宽度,我改变了Thumb.Template,使它成为一个扁平的白色长方形

代码语言:javascript
复制
<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
            <Grid Margin="{TemplateBinding Padding}">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="Auto" />
                </Grid.ColumnDefinitions>
                <Border x:Name="columnHeaderBorder"
                        TextBlock.FontWeight="Bold"
                        TextBlock.Foreground="blue"
                        BorderThickness="2"
                        BorderBrush="blue"
                        Background="white"
                        Width="{TemplateBinding Width}"
                        Margin="3,3,3,3"
                        Padding="3,0,3,0">
                    <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                              VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                              SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
                </Border>
                <!--BorderBrush="{Binding VerticalGridLinesBrush, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}"-->
                <Thumb x:Name="PART_RightHeaderGripper" Grid.Column="1"
                       HorizontalAlignment="Right"
                       Width="6" BorderThickness="0"
                       Margin="0,3"
                       BorderBrush="white"
                       Background="white"
                       Cursor="SizeWE">
                    <Thumb.Template>
                        <ControlTemplate>
                            <Border Background="{TemplateBinding Background}"></Border>
                        </ControlTemplate>
                    </Thumb.Template>
                </Thumb>
            </Grid>
            <ControlTemplate.Triggers>
                <Trigger Property="Content" Value="{x:Null}">
                    <!--<Setter Property="BorderBrush" Value="Red" TargetName="columnHeaderBorder"/>-->
                    <Setter Property="BorderBrush" Value="Transparent" TargetName="columnHeaderBorder"/>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </Setter.Value>
</Setter>

//我替换了模板中的一些StaticResources,以使我的项目编译。请将它们还原回或只复制模板中修改过的部分。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45924746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档