6

如果你有:

<Grid >
  <Grid.RowDefinitions>
    <RowDefinition Height="*"/>
    <RowDefinition Height="2*"/>
    <RowDefinition Height="*"/>
  </Grid.RowDefinitions>
</Grid>

并在每个网格中放置一个厚度为 1 的边框,您将在网格行之间的边框上获得双倍厚度。解决这个问题的唯一方法是指定边框每个边缘的厚度,还是有一些控件可以在没有双倍厚度的情况下为每列在网格周围创建边框?

目前正在尝试这样做:

                    <Border  
                      BorderBrush="Black"
                      BorderThickness="1"
                      Margin="19,0,0,0"  
                      Background="LightGray"
                      >
                      <Viewbox VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
                        <Grid>
                          <Grid.RowDefinitions>
                            <RowDefinition Height="*"/>
                            <RowDefinition Height="2*"/>
                            <RowDefinition Height="*"/>
                          </Grid.RowDefinitions>
                          <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition Width="Auto"/>
                      </Grid.ColumnDefinitions>

                      <TextBlock
                        Grid.Row="1"
                        Grid.Column="0"
                        x:Name="TreeViewHeaderTextBox" 
                        VerticalAlignment="Center"
                        HorizontalAlignment="Center" 
                        Text="Time"
                        Foreground="Black"
                        />


                      <TextBlock
                        Grid.Row="1"
                        Grid.Column="1"
                        Text="X"
                        TextAlignment="Center"
                        HorizontalAlignment="Stretch"
                        VerticalAlignment="Center"
                        />

                      <TextBlock 
                        Grid.Row="1"
                        Grid.Column="2"
                        Text="O"
                        TextAlignment="Center"
                        HorizontalAlignment="Stretch"
                        VerticalAlignment="Center"
                        />

                    </Grid>
                  </Viewbox>
                </Border>

但是,我开始对旧代码进行更改,所以这不是双边框的真正好例子。但是,我也从这个模板中得到了双边框。

              <Border Name="Bd"
                      Grid.Column="1"
                      Background="{TemplateBinding Background}"
                      BorderBrush="{TemplateBinding BorderBrush}"
                      BorderThickness="{TemplateBinding BorderThickness}"
                      Padding="{TemplateBinding Padding}"
                      SnapsToDevicePixels="true">
                <ContentPresenter x:Name="PART_Header"
                                  ContentSource="Header"
                                  HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                  SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
              </Border>

因为每个项目最终都有一个与下一个项目接触的双倍厚度边框。

编辑2:阅读评论后,我意识到我可能不应该在控件的数据模板上定义边框,而只是通过控件设置边框并更改控件模板上的模板。可能会从中获得双重边界。

4

2 回答 2

1

厚度可以设置为="left, top, right, bottom",即可以将重叠部分设置为一半。

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="2*"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Border BorderThickness="1,1,1,0.5" BorderBrush="Black"/>
    <Border BorderThickness="1,0.5" BorderBrush="Black" Grid.Row="1" />
    <Border BorderThickness="1,0.5,1,1" BorderBrush="Black"  Grid.Row="2" />
</Grid>
于 2013-08-26T16:53:46.967 回答
1

如果您将网格包裹在边框元素中并设置厚度,我相信这会在每个网格项目之间放置一个边框并避免您的双边框 - 现在尝试对此进行测试。

于 2013-08-26T16:12:21.977 回答