【问题标题】:Set a border on a datagrid row在数据网格行上设置边框
【发布时间】:2015-04-20 15:56:25
【问题描述】:

我的数据网格行和单元格有以下样式:

<Style TargetType="{x:Type DataGridRow}">
            <Setter Property="Margin" Value="0"/>
            <Setter Property="BorderBrush" Value="Transparent" />
            <Setter Property="HorizontalAlignment" Value="Stretch" />
            <Setter Property="Foreground" Value="{StaticResource ResourceKey=CouleurTexte}" />
            <Setter Property="Padding" Value="0"/>
            <Setter Property="BorderThickness" Value="1"/>
            <Setter Property="Cursor" Value="Arrow"/>
            <Style.Triggers>
                <Trigger Property="IsSelected" Value="True">
                    <Setter Property="Background" Value="{StaticResource ResourceKey=CouleurDataGridRowSelected}"/>
                    <Setter Property="Foreground" Value="{StaticResource ResourceKey=CouleurTexteBouton}" />
                    <Setter Property="BorderBrush" Value="{StaticResource ResourceKey=CouleurDataGridBorderSelected}" />
                </Trigger>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Background" Value="{StaticResource ResourceKey=CouleurDataGridRowHover}"/>
                </Trigger>
            </Style.Triggers>
        </Style>
<Style TargetType="{x:Type DataGridCell}">
        <Setter Property="Padding" Value="5" />
        <Setter Property="BorderBrush" Value="Transparent" />
        <Setter Property="FocusVisualStyle" Value="{x:Null}" />
        <Setter Property="Cursor" Value="Arrow"/>
        <Setter Property="BorderThickness" Value="0"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type DataGridCell}">
                    <Border Padding="{TemplateBinding Padding}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
                        <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}">
                            <ContentPresenter.ContentTemplate>
                                <DataTemplate>
                                    <TextBlock Background="Transparent" Name="texte" TextTrimming="CharacterEllipsis" 
                                Height="auto" Width="auto" VerticalAlignment="Center" Text="{Binding Text}"/>
                                </DataTemplate>
                            </ContentPresenter.ContentTemplate>
                        </ContentPresenter>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <Trigger Property="IsSelected" Value="True">
                <Setter Property="Background" Value="{StaticResource ResourceKey=CouleurDataGridRowSelected}"/>
            </Trigger>
            <DataTrigger Binding="{Binding Path=IsMouseOver, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}" Value="True">
            </DataTrigger>
        </Style.Triggers>
    </Style>

我的数据网格用我的列宽度中的星号定义(这样它们就可以占据窗口的所有空间)。

我想在整行被选中时为其设置一个边框。在我将数据网格行中的 BorderThickness 设置为 1 之前,我的样式工作正常。 当我执行数据网格时,显示水平滚动条仅滚动一个(可能是 2 个)像素(添加的边框中的那个)。 当我的所有列的宽度都不是“”时,它可以正常工作,但我需要找到一种方法使其与“”一起工作。我怎样才能避免这种行为?边框似乎在行的外侧?

谢谢

【问题讨论】:

    标签: c# wpf datagrid


    【解决方案1】:

    我记得有这个问题并花了很多时间来修复它,最后不得不通过在您的控件上设置 -ve 边距来修复它,您可以将 -ve 边距设置为等于您的边框宽度并查看不需要的滚动条消失。

    【讨论】:

    • 谢谢你的回答,但我不明白“-ve margin”你能给我一个例子或链接吗?谢谢
    【解决方案2】:

    感谢 Muds 的回答,我找到了一个技巧。

    使用他的解决方案,我遇到了备用行背景问题,因此我使用 Snoop 检查并尝试更改不同的值,看来我们可以通过为 datagridRow 设置一个新模板来“解决”这个问题,其中 margin=" DataGridCellsPresenter 上的 -1,0,-1,0"(我的边框粗细为 1)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-15
      • 2017-01-19
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-14
      相关资源
      最近更新 更多