Wpf 边界角半径填充暴行
我的边界定义如下:Wpf 边界角半径填充暴行,wpf,Wpf,我的边界定义如下: <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="#FF6E
<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>
但是,当角点有半径时,它不能正确填充。以下是左下角的图像:
你可以清楚地看到明亮的背景在黑暗的前景中闪烁。有没有办法缓解这种情况
编辑:附加图片,显示背景通过以下方式发光:
在这种情况下,只看到背景的白色部分,而黑色部分(同时也穿过)实际上无法检测到。这是因为您设置了边界厚度和边界笔刷。 试着这样做:
<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。在这种情况下,我通常将两个边框嵌套在一起。这只适用于内部填充颜色不透明的情况,但您的颜色已经不透明,所以这应该是好的 例如,使用纯色而不是渐变色,使示例更容易理解:
...
您可以改为使用:
<Border CornerRadius="0,0,16,16" Background="Blue">
<Border CornerRadius="0,0,15,15" Background="Gray" Margin="1,1,1,2">
...
</Border>
</Border>
...
因此,外部边框使用“边框”颜色作为其背景
,然后内部边框将其边距
设置为“边框宽度”,然后使用真实的“背景”颜色作为其背景
。效果相同,但半透明接缝消失了
要使其看起来正确,您需要调整内边框的
拐角半径
——它位于边框内部,因此半径略小于外拐角。如果边框宽度为1像素,则您希望拐角半径
小1像素;但是,由于边界不均匀,您可能只想仔细观察它,看看什么是正确的。还有一个选项:我编写了一个子类border,用于修复抗锯齿间隙。最新代码。可以随意使用。我需要边框以获得视觉效果,因此无法将其设置为0。此外,这不仅仅是边界。边界刷闪耀通过。在任何特定时刻,窗户后面的任何颜色都是透过窗户发出的光(我检查了:)。你知道颜色发光槽在哪里吗!很难,我认为你应该尝试做你的视觉效果,否则。你能提供更多关于边界使用的信息吗?是的?我不知道,我要求你提供更多关于视觉效果的信息。但不管怎样,乔·怀特的回答似乎比我的好。解决了我的问题。谢谢
<Border CornerRadius="0,0,16,16" Background="Blue">
<Border CornerRadius="0,0,15,15" Background="Gray" Margin="1,1,1,2">
...
</Border>
</Border>