我正在尝试删除WPF GridView中最右边的GridLine。 这是一个例子.xaml
<Window x:Class="Pack.ExampleForm"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Pack"
Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"
Width="400" Height="300">
<DataGrid Margin="5" AutoGenerateColumns="False"
CanUserReorderColumns="False" HeadersVisibility="Column">
<DataGrid.Columns>
<DataGridTextColumn Binding="{x:Null}" CanUserResize="False"/>
<DataGridTextColumn Binding="{Binding Path=Key}" Header="Request Header" Width="*"/>
<DataGridTextColumn Binding="{Binding Path=Value}" Header="Value" Width="*"/>
</DataGrid.Columns>
<local:RequestHeader Key="Subject 1" Value="Body 1" />
<local:RequestHeader Key="Subject 1" Value="Body 1" />
</DataGrid>
</Window>
然而,这是最右边的网格线,如设计师所示,以黄色圈出。
有没有办法删除它并没有边框,因为它在左侧。如果可能,宁愿在.xaml中这样做。
答案 0 :(得分:12)
<DataGridTextColumn Binding="{Binding Value}" Width="*">
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="Margin" Value="0,0,-1,0"></Setter>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
答案 1 :(得分:3)
虽然@ monstr的解决方案 工作,但感觉就像是滥用了Margin属性(它也可能会在以后跟踪布局问题时更加困难)。另一个解决方案与@Nick Sologoub和@Xtr建议的解决方案非常相似,但稍微更清晰一点,就是使用DataGrid的CellStyle属性来修改与DataGrid关联的所有单元格样式以及DataGrid的GridLinesVisibility属性。
<DataGrid GridLinesVisibility="None">
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="BorderThickness" Value="1,0,0,1"/>
<Setter Property="BorderBrush" Value="Black"/>
</Style>
</DataGrid.CellStyle>
<!--Other DataGrid Items-->
</DataGrid>
通过以这种方式设置单元格样式,您不会影响控件的布局(而忽略边距)。您还可以获得仅影响这一个特定DataGrid的好处,而不会影响您的应用程序中的其他DataGrid。但是,如果 希望将此样式应用于窗口中的所有DataGrids,则可以将其放在窗口的资源中,甚至可以放在应用程序的资源中。
<Window>
<Window.Resources>
<Style TargetType="DataGrid">
<Setter Property="GridLinesVisibility" Value="None"/>
</Style>
<Style TargetType="DataGridCell">
<Setter Property="BorderThickness" Value="1,0,0,1"/>
<Setter Property="BorderBrush" Value="Black"/>
</Style>
</Window.Resources>
<Grid>
<DataGrid>
<!--DataGrid Items-->
</DataGrid>
</Grid>
</Window>
请注意,还包含GridLinesVisibility属性,因为此解决方案必须正常工作。
实现窗口/应用程序级别样式的正确方法(如上所述)很可能包括一些ResourceDictionaries的使用,但这是一个完全不同的主题。
答案 2 :(得分:1)
如果要删除整个网格单元格边框,则可以使用 GridLinesVisibility =“无”。 以下是删除单边框的解决方案。
答案 3 :(得分:1)
我做了一些研究,但似乎MSFT没有公开属性来修改每个特定的网格线。所以我有一个解决方法给你。它并不理想,但它非常干净,不需要代码隐藏。
基本上有一个属性可以控制网格线的可见性。你要做的是隐藏垂直的那些,然后为手动创建垂直网格线的单元格创建一个样式。您将该样式应用于除最后一列之外的每一列,您将获得所需的设计。
<Window.Resources>
<Style x:Key="DataGridCellStyle">
<Setter Property="DataGridCell.BorderThickness" Value="0 0 1 0" />
<Setter Property="DataGridCell.BorderBrush" Value="Black" />
</Style>
</Window.Resources>
<Grid>
<DataGrid x:Name="grid" Margin="5" AutoGenerateColumns="False" CanUserReorderColumns="False" HeadersVisibility="Column"
GridLinesVisibility="Horizontal" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{x:Null}" CanUserResize="False" CellStyle="{StaticResource DataGridCellStyle}"/>
<DataGridTextColumn Binding="{Binding Path=Key}" Header="Request Header" Width="*" CellStyle="{StaticResource DataGridCellStyle}"/>
<DataGridTextColumn Binding="{Binding Path=Value}" Header="Value" Width="*"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
答案 4 :(得分:0)
1)为TextBox自定义 BorderThickness 属性(2,2,0,2)创建样式。
2)在最后一个DataGridColumn中添加样式。
这样,最后一列的TextBox边框就会产生所需的更改。
答案 5 :(得分:0)
如果不重新模板化整个DataGrid,可以将DataGrid的GridLinesVisibility设置为Horizontal,并指定一个更改每个单元格边框属性的DataGridCell样式。
<DataGrid Margin="5"
AutoGenerateColumns="False"
CanUserReorderColumns="False"
HeadersVisibility="Column"
GridLinesVisibility="Horizontal"
ItemsSource="{Binding SomeDictionary}">
<DataGrid.Resources>
<Style TargetType="DataGridCell">
<Setter Property="BorderThickness" Value="1,0,0,0"/>
<Setter Property="BorderBrush" Value="Black"/>
</Style>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn Binding="{x:Null}" CanUserResize="False"/>
<DataGridTextColumn Binding="{Binding Path=Key}" Header="Request Header" Width="*"/>
<DataGridTextColumn Binding="{Binding Path=Value}" Header="Value" Width="*"/>
</DataGrid.Columns>
</DataGrid>
然后,您将只看到实际的DataGrid边框,如果需要,可以使用DataGrid上的BorderThickness="1,1,0,1"
删除。
答案 6 :(得分:0)
我找到的解决方案使用Grid而不是DataGrid。我用BorderThickness =&#34; a,b,c,d&#34;将每个单元格包装在一个边框中。其中:
a = Left Border
b = Top Border
c = Right Border
d = Bottom Border
我不想看的任何人都被设置为0。 如果我反复使用特定的一个,我设置一个样式并重用它。
答案 7 :(得分:0)