2014-01-20 28 views
6

我有一个这样的网格:如何在网格中设置列的右边框?

<Grid>  
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="1*"/> 
      <ColumnDefinition Width="4*"/> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="1*"/> 
     </Grid.RowDefinitions> 


     <TextBlock Grid.Row="0" Grid.Column="0">Row 0, Column 1</TextBlock> 
     <TextBlock Grid.Row="1" Grid.Column="0">Row 1, Column 1</TextBlock> 
     <TextBlock Grid.Row="2" Grid.Column="0">Row 2, Column 1</TextBlock> 
     <TextBlock Grid.Row="3" Grid.Column="0">Row 3, Column 1</TextBlock> 

     <TextBlock Grid.Row="0" Grid.Column="1" Grid.RowSpan="4">Column 1</TextBlock> 
    </Grid> 

我不打算在实际应用中实际使用TexBlocks,我用它们来使示例更容易。 基本上我想设置从第1列的列0中的所有内容的边界。

你是如何做到这一点的?

回答

8

之一来显示Border的最佳方法是使用一个Border元件。你只需将它声明背后其他内容:

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="1*"/> 
     <ColumnDefinition Width="4*"/> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="1*"/> 
    </Grid.RowDefinitions> 

    <Border Grid.Column="1" Grid.RowSpan="4" BorderBrush="Black" 
     BorderThickness="1,0,0,0" Background="{x:Null}" /> 

    <TextBlock Grid.Row="0" Grid.Column="0">Row 0, Column 1</TextBlock> 
    <TextBlock Grid.Row="1" Grid.Column="0">Row 1, Column 1</TextBlock> 
    <TextBlock Grid.Row="2" Grid.Column="0">Row 2, Column 1</TextBlock> 
    <TextBlock Grid.Row="3" Grid.Column="0">Row 3, Column 1</TextBlock> 
    <TextBlock Grid.Row="0" Grid.Column="1" Grid.RowSpan="4">Column 1</TextBlock> 
</Grid> 
+0

我试图使用边框,但我想我必须包围我想要放入边框的控件。我总是发现WPF中的边框有点混乱。所以边界的厚度不会从我的专栏空间中消失吗? – Dzyann

+1

@Dzyann不,它不会消除任何空间问题,因为你只是通过它在树中的位置将它渲染到现有的控件后面。讨厌成为一个坚持者,但正是我的回答所显示的只是他使用的“边界”,这只是可能用于实现相同概念的多种可能的事情之一。 –

+1

@Dzyann,尽管它不会占用列的空间,但如果你有一个很厚的'Border',那么你可能*需要在其他控件上使用'Padding'或'Margin'来补偿它。 – Sheridan

2

有很多方法可以完成它,最简单的方法就是画出一条线(除了我欺骗并使用了一个形状......我知道,对我来说很可怕吗?但是你明白了......)希望这会有所帮助。

<Grid>  
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="1*"/> 
      <ColumnDefinition Width="4*"/> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="1*"/> 
     </Grid.RowDefinitions> 

     <Rectangle Grid.RowSpan="4" Width="1" Fill="Red" HorizontalAlignment="Right"/> 

     <TextBlock Grid.Row="0" Grid.Column="0">Row 0, Column 1</TextBlock> 
     <TextBlock Grid.Row="1" Grid.Column="0">Row 1, Column 1</TextBlock> 
     <TextBlock Grid.Row="2" Grid.Column="0">Row 2, Column 1</TextBlock> 
     <TextBlock Grid.Row="3" Grid.Column="0">Row 3, Column 1</TextBlock> 

     <TextBlock Grid.Row="0" Grid.Column="1" Grid.RowSpan="4">Column 1</TextBlock> 
    </Grid> 
+0

+1噢,抱歉@ChrisW ......我的回答是烦人的与你相似......我真的不看前。 – Sheridan