Grid列中的WPF行定位

时间:2015-02-19 17:03:41

标签: wpf xaml line

我有一个Grid,其中包含3个大小相同的列。

<Grid.ColumnDefinitions>
    <ColumnDefinition Width="1*"/>
    <ColumnDefinition Width="1*"/>
    <ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>

我想绘制一条水平线,使其从第一列的中间开始,到最后一列的中间结束。

<Line Grid.ColumnSpan="3" Stretch="Fill" 
      X1="0" X2="1" Y1="0" Y2="0"
      VerticalAlignment="Center" HorizontalAlignment="Stretch"/>

所需的结果应该是下图中底部显示的行。

enter image description here

Margins硬编码到Line这里不太可行。

如何实现?

2 个答案:

答案 0 :(得分:2)

创建嵌套网格:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="1*"/>
        <ColumnDefinition Width="1*"/>
        <ColumnDefinition Width="1*"/>
    </Grid.ColumnDefinitions>
    <Grid Grid.ColumnSpan="3">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="1*"/>
            <ColumnDefinition Width="4*"/>
            <ColumnDefinition Width="1*"/>
        </Grid.ColumnDefinitions>
        <Line Grid.Column="1" Stretch="Fill" X2="1"/>
    </Grid>
</Grid>

答案 1 :(得分:1)

这可能不是最好的&#34;方式...但是如果你使用边框而不是线条怎么办?然后使用颜色/透明渐变设置背景,在1/6和5/6点使用硬停止?

或者,您可以使用6个等距离的色谱柱,并从第2列进行4个色谱柱。不过,这会对网格中的其他项产生影响。

<Border Grid.ColumnSpan="3" BorderThickness="0" Height="5">
        <Border.Background>
            <LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5">
                <GradientStop Color="Transparent" Offset="0.1666"/>
                <GradientStop Color="Transparent"  Offset="0.8334"/>
                <GradientStop Color="Red" Offset="0.1667"/>
                <GradientStop Color="Red" Offset="0.8333"/>
            </LinearGradientBrush>
        </Border.Background>
    </Border>