WPF网格 - 绘制自定义网格线

8

假设我有一个非常简单的WPF网格(6行x 6列),定义如下:

<Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
</Grid.RowDefinitions>

<Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>

我希望以下网格线(一个实线和两个虚线)绘制如下(我在Excel中绘制了此图形,所以请忽略Excel的浅色网格线):
如何在XAML中完成此操作?
1个回答

17

若要在所需单元格的顶部放置Line,可以设置VerticalAlignment="Top"、适当的Grid.ColumnSpan和设置StrokeDashArray来获取虚线。

编辑:上述内容只是我脑海中的想法,我似乎忘记了WPF的一些“特点”。

以下是我成功运行的示例。 我将其放在一个带有5个行和列,星形大小的网格中。

<Line Grid.Row="0" Grid.Column="1" Grid.RowSpan="2" Grid.ColumnSpan="2"
    VerticalAlignment="Center" Stroke="Black" StrokeThickness="1"
    X2="{Binding Path=ActualWidth, RelativeSource={RelativeSource Self}}" />
<Line Grid.Row="1" Grid.Column="2" Grid.RowSpan="2" Grid.ColumnSpan="2"
    VerticalAlignment="Center" Stroke="Black" StrokeThickness="2" StrokeDashArray="5,3"
    X2="{Binding Path=ActualWidth, RelativeSource={RelativeSource Self}}" />

注意:如果行的大小会变化,那么这种方法不适用,因为它只是将两行之间的线居中。如果它们的大小会变化,您需要 VerticalAlignment="Top",但要注意,该行的顶部一半会被裁剪。


1
我尝试了你建议的方法,但由于某种原因,该行未显示。我的XAML如下: <Line Grid.Row="1" Grid.Column="1" VerticalAlignment="Top" Stroke="Black" StrokeThickness="1"/> - Randy Minder
我的错。我认为这是因为该行在没有实际拉伸线的情况下可以拉伸,我正在寻找解决方案。 - Kendall Frey
1
@RandyMinder 你设置了 X2 属性吗?它定义了线的宽度。 - Rachel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接