我有两个彼此重叠的边界 . 一个有BorderThickness但没有背景,另一个没有边框厚度,但有背景 . 两个边界的CornerRadius都是3.问题是其中一个边界的背景角落从另一个边界的角落后面突出 .
这是XAML,第一个边框元素具有背景,边框名为FocusVisual,具有BorderThickness .
<Grid x:Name="grid">
<Border Background="{TemplateBinding Background}"
CornerRadius="3">
<Grid>
<Border x:Name="MouseOverVisual"
Opacity="0"
Background="{StaticResource NuiFieldHoverBrush}"
CornerRadius="3" />
<Border>
<Grid>
<ScrollViewer x:Name="PART_ContentHost" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
<ContentPresenter x:Name="PART_WatermarkHost"
Content="{TemplateBinding Watermark}"
ContentTemplate="{TemplateBinding WatermarkTemplate}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
IsHitTestVisible="False"
Margin="{TemplateBinding Padding}"
Visibility="Collapsed"/>
</Grid>
</Border>
</Grid>
</Border>
<Border x:Name="FocusVisual"
Opacity="0"
BorderThickness="{TemplateBinding BorderThickness}"
BorderBrush="{StaticResource NuiFocusBrush}"
CornerRadius="3" />
</Grid>
CornerRadius对Border对象的Background和Border有不同的影响,看起来像是WPF中的一个bug .
我可以将BorderThickness添加到具有背景的边框并将BorderBrush设置为背景颜色,但这会导致该边框的子元素被BorderThickness推入 . 我可以通过重新排列元素来解决这个问题,但这有点痛苦,所以我想如果有人有更好的解决方法我会看到 .
2 回答
你应该重新计算内边界的
CornerRadius
.假设一个更简单的例子:
InnerBorder的宽度和高度比每边的BorderThickness / 2小于OuterBorder,所以你应该用这种方式计算corder半径:
'内边界的CornerRadius'='外边界的CornerRadius' - '内边界的边界'/ 2 .
在此示例中,内边框的CornerRadius应为3 .
Edit: 我认为this SO更能回答你的问题 .
在深灰色边框处添加透明边框,它将与蓝色边框对齐 . 确保它们具有相同的边框厚度 .