如何防止重叠时出现双厚度边框?

Jam*_*eet 6 c# wpf xaml

如果你有:

<Grid >
  <Grid.RowDefinitions>
    <RowDefinition Height="*"/>
    <RowDefinition Height="2*"/>
    <RowDefinition Height="*"/>
  </Grid.RowDefinitions>
</Grid>
Run Code Online (Sandbox Code Playgroud)

并将厚度为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>
Run Code Online (Sandbox Code Playgroud)

但是,我开始对旧代码进行更改,因此这不是双边框的好例子.但是,我也从这个模板中获得了双重边框.

              <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>
Run Code Online (Sandbox Code Playgroud)

因为每个项目都有一个双倍厚度的边框,它接触下一个项目.

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

Mat*_*hew 1

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