WPF:Border.BorderThickness = 0不起作用

时间:2011-11-17 13:59:20

标签: .net wpf layout

我有以下xaml:

<UserControl x:Class="MyCompany.MyApp.MySubModule.Views.MyView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="43" d:DesignWidth="115">
    <Grid>
        <Border Margin="20, 0, 0, 0" CornerRadius="0, 10, 10, 0" BorderBrush="Transparent" BorderThickness="0">
            <Border.Background>
                <LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
                    <GradientStopCollection>
                        <GradientStop Color="#0066CC" Offset="0" />
                        <GradientStop Color="#0075EA" Offset="1" />
                    </GradientStopCollection>
                </LinearGradientBrush>
            </Border.Background>
        </Border>
    </Grid>
</UserControl>

我期望的是Border没有厚度(即不可见)。但实际上你可以看到它。为什么会这样,我怎么让它消失?

4 个答案:

答案 0 :(得分:3)

代码中的边框不可见。可能你已经将usercontrol包裹在另一个边框或带边框的控件中。

或许你想到了背景?设置边框的Background-property填充border-element覆盖的区域。要隐藏整个元素,请将边框的Visibility - 属性设置为隐藏或折叠,或使用透明画笔作为边框背景。

BorderBrush和BorderThickness仅用于绘制边框(控件)。然而,Border-control是一个装饰控件,它有自己的区域(它的子控件需要的区域)。

答案 1 :(得分:1)

这似乎是特定于Visual Studio设计器的,它不会出现在Blend中或者您实际使用该控件。我把它们中的一些放在StackPanel中,它们之间没有间隙。

答案 2 :(得分:0)

我必须承认我自己使用了Visibility属性,例如

<Border Visibility="Visibility.Hidden" />

答案 3 :(得分:0)

我知道这是一个老问题,但我刚刚遇到了同样的问题而且解决方案(对我而言)与那些发布的问题有所不同。

假的边界&#34; (对我来说)是由布局引擎的抗锯齿alghoritms引起的。这导致边界的某些线条变得平滑&#34;并渲染多个像素(即使它被认为是不可见的,通常还会留下一些文物)。

解决方案:通过将根元素的UseLayoutRounding属性设置为&#34; True&#34;,确保将布局的测量值四舍五入为整个像素。 (MSDN声明它默认设置为true,但似乎并不一定如此)。

更详细的解释和示例:http://blogs.msdn.com/b/text/archive/2009/08/27/layout-rounding.aspx