gpt4 book ai didi

wpf - 如何使圆角边框的内容也圆角?

转载 作者:行者123 更新时间:2023-12-03 06:01:34 28 4
gpt4 key购买 nike

我有一个带有圆角的边框元素,其中包含 3x3 网格。网格的角伸出边界。我该如何解决这个问题?我尝试使用 ClipToBounds 但没有任何进展。感谢您的帮助

最佳答案

以下是此 thread 的亮点由 Jobi 提及

  • 装饰器(即 Border)或布局面板(即 Stackpanel)都没有开箱即用的这种行为。
  • ClipToBounds 用于布局。 ClipToBounds 不会阻止元素在其边界之外绘制;它只是防止 child 的布局“溢出”。此外,大多数元素不需要 ClipToBounds=True,因为它们的实现无论如何都不允许其内容布局溢出。最显着的异常(exception)是 Canvas。
  • 最后,Border 将圆角视为其布局边界内的绘图。

这是一个继承自 Border 并实现适当功能的类的实现:

     /// <Remarks>
/// As a side effect ClippingBorder will surpress any databinding or animation of
/// its childs UIElement.Clip property until the child is removed from ClippingBorder
/// </Remarks>
public class ClippingBorder : Border {
protected override void OnRender(DrawingContext dc) {
OnApplyChildClip();
base.OnRender(dc);
}

public override UIElement Child
{
get
{
return base.Child;
}
set
{
if (this.Child != value)
{
if(this.Child != null)
{
// Restore original clipping
this.Child.SetValue(UIElement.ClipProperty, _oldClip);
}

if(value != null)
{
_oldClip = value.ReadLocalValue(UIElement.ClipProperty);
}
else
{
// If we dont set it to null we could leak a Geometry object
_oldClip = null;
}

base.Child = value;
}
}
}

protected virtual void OnApplyChildClip()
{
UIElement child = this.Child;
if(child != null)
{
_clipRect.RadiusX = _clipRect.RadiusY = Math.Max(0.0, this.CornerRadius.TopLeft - (this.BorderThickness.Left * 0.5));
_clipRect.Rect = new Rect(Child.RenderSize);
child.Clip = _clipRect;
}
}

private RectangleGeometry _clipRect = new RectangleGeometry();
private object _oldClip;
}

关于wpf - 如何使圆角边框的内容也圆角?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/324641/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com