边框圆角半径填充残留问题

5

我有一个如下所示定义的边框:

<Border x:Name="BaseBar" BorderThickness="1,1,1,2" Height="29" CornerRadius="0,0,16,16" Grid.Row="2">
<Border.BorderBrush>
    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
        <GradientStop Color="#FF6E6E6E" Offset="0.004"/>
        <GradientStop Color="#FF1A1A1A" Offset="0.043"/>
    </LinearGradientBrush>
</Border.BorderBrush>
<Border.Background>
    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
        <GradientStop Color="#FF313131" Offset="0"/>
        <GradientStop Color="#FF232323" Offset="1"/>
    </LinearGradientBrush>
</Border.Background>

不过,当边角有半径时,它不能正确地填充。下面是左下角的图像:

圆角处边框填充不良

你可以清楚地看到比较亮的背景透过比较暗的前景。是否有方法可以减轻这种情况?

编辑:附加图片,显示是背景透过了边框:

圆角处边框填充不良

在这种情况下,只能看到背景的白色部分,而黑色部分(虽然也通过了)并不真正可检测。

3个回答

5
在这种情况下,我通常会将两个边框嵌套在彼此内部。只有当内部填充颜色不透明时才能使用此方法,但是您的已经是不透明的,因此应该没问题。
所以,举例来说(为了便于理解示例,使用纯色而非渐变):
<Border BorderThickness="1,1,1,2" CornerRadius="0,0,16,16"
        BorderBrush="Blue" Background="Gray">
  ...
</Border>

你可以使用以下方法代替:

<Border CornerRadius="0,0,16,16" Background="Blue">
  <Border CornerRadius="0,0,15,15" Background="Gray" Margin="1,1,1,2">
    ...
  </Border>
</Border>

因此外边框使用 "border" 颜色作为其背景,然后内边框将其边距设置为 "边框宽度",然后在其背景中使用真正的 "背景" 颜色。 效果是相同的,但半透明的接缝已经消失了。
要使其看起来正确,您需要调整内边框的 CornerRadius -- 它位于边框内部,因此比外角略小。 如果边框宽度为1像素,则您需要使 CornerRadius减小1像素;但由于边框不均匀,您可能只需眼测看看哪个看起来合适即可。

1

还有一个选项:我编写了一个边框的子类,修复了抗锯齿间隙。最新代码在这里。随意使用。


问题已解决。谢谢! - Keytrap

0

这是因为您设置了 BorderThickness 和 BorderBrush。 请尝试使用以下方式:

    <Border x:Name="BaseBar" BorderThickness="0" Height="29" CornerRadius="0,0,16,16">
        <Border.Background>
            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                <GradientStop Color="#FF313131" Offset="0"/>
                <GradientStop Color="#FF232323" Offset="1"/>
            </LinearGradientBrush>
        </Border.Background>
    </Border>

Border.BorderBrush和Border.Background不同,所以看起来像是更亮的背景透过更暗的前景,但我认为这只是你的Border.BorderBrush。


我需要边框来产生视觉效果,所以不能将其设置为0。而且,不仅仅是Border.BorderBrush显露出来。无论在任何时刻窗口背后的颜色都会显示出来(我已经检查过了 :))。 - jomido
你关于颜色透亮的想法是正确的!不过,我认为你应该尝试以其他方式实现视觉效果。你能否提供有关边框使用的更多信息? - Gab
是的?否则我该如何制作我的视觉效果呢? - jomido
我不知道,我让你提供更多关于你的视觉效果的信息。但无论如何,Joe White的答案似乎比我的更好。 - Gab

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接