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

时间:2013-08-26 16:03:32

标签: c# wpf xaml

如果你有:

<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:阅读完评论后,我意识到我可能不应该在控件的datatemplate上定义边框,而只是通过控件设置边框并更改controltemplate上的模板。可能会从那里获得双重边界。

2 个答案:

答案 0 :(得分:1)

如果你在一个边框元素中包裹网格并设置厚度我相信在每个网格项之间放置一个边框并避免你的双边框 - 现在尝试测试它。

答案 1 :(得分:1)

厚度可以设置为=“左,上,右,下”,这意味着您可以将重叠部分设置为一半。

<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>