在数据网格行上设置边框
Set a border on a datagrid row
我的数据网格行和单元格具有以下样式:
<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>
我的数据网格在我的列的宽度上定义了星号(因此它们可以占用 window 的所有 space)。
我想在选中整行时为其设置边框。在将数据网格行中的 BorderThickness 设置为 1 之前,我的样式工作正常。
当我执行数据网格时,显示水平滚动条仅滚动一个(可能是 2 个)像素(添加的边框)。
当我的所有列的宽度都不是“”时,它工作正常,但我需要找到一种方法使其与“”一起工作。我怎样才能避免这种行为?边框似乎在行的外面?
谢谢
我记得有过这个问题并花了很多时间来解决它,最后不得不通过控制 -ve 边距来解决它,你可以将 -ve 边距设置为等于你的边框宽度并查看不需要的滚动条消失了。
多亏了 Muds 的回答,我找到了一个技巧。
使用他的解决方案,我在交替行背景方面遇到了麻烦,所以我使用 Snoop 检查并尝试更改不同的值,看来我们可以 "solve" 通过为 datagridRow 设置新模板来解决这个问题在 DataGridCellsPresenter 上使用 margin="-1,0,-1,0"(我的边框厚度为 1)。
我的数据网格行和单元格具有以下样式:
<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>
我的数据网格在我的列的宽度上定义了星号(因此它们可以占用 window 的所有 space)。
我想在选中整行时为其设置边框。在将数据网格行中的 BorderThickness 设置为 1 之前,我的样式工作正常。 当我执行数据网格时,显示水平滚动条仅滚动一个(可能是 2 个)像素(添加的边框)。 当我的所有列的宽度都不是“”时,它工作正常,但我需要找到一种方法使其与“”一起工作。我怎样才能避免这种行为?边框似乎在行的外面?
谢谢
我记得有过这个问题并花了很多时间来解决它,最后不得不通过控制 -ve 边距来解决它,你可以将 -ve 边距设置为等于你的边框宽度并查看不需要的滚动条消失了。
多亏了 Muds 的回答,我找到了一个技巧。
使用他的解决方案,我在交替行背景方面遇到了麻烦,所以我使用 Snoop 检查并尝试更改不同的值,看来我们可以 "solve" 通过为 datagridRow 设置新模板来解决这个问题在 DataGridCellsPresenter 上使用 margin="-1,0,-1,0"(我的边框厚度为 1)。