圆角仅在视觉对象的一侧

Rounded Corners only on one side of a Visual

我想要一个 Visual 圆角。这是我的代码:

auto clip = compositor->CreateGeometricClip();
auto roundedRectangle = compositor->CreateRoundedRectangleGeometry();
roundedRectangle->Size = Windows::Foundation::Numerics::float2(width, height);
roundedRectangle->CornerRadius = Windows::Foundation::Numerics::float2(10, 10);
clip->Geometry = roundedRectangle;
visual->Clip = clip;

这可行,但这会在视觉对象的所有 4 个角上创建圆角。是否可以使用 Composition API 来实现我的目标?作为参考,这是我想要的最终结果。

而不是我现在拥有的

您可以尝试使用 CompositionRoundedRectangleGeometry 实例的 Offset 属性 和 CornerRadius 属性 来获得目标效果。 Visual.Clip 属性 指定视觉对象的剪辑区域。呈现视觉对象时,仅显示落在剪裁区域内的视觉对象部分,而剪裁超出剪裁区域的任何内容。因此,我们可以通过调整visual的大小和clip.

的大小和偏移量,将圆角矩形右侧的一小部分切掉

请检查以下代码作为示例:

auto clip = _compositor->CreateGeometricClip();
auto roundedRectangle = _compositor->CreateRoundedRectangleGeometry();
roundedRectangle->Size = float2(100, 100);
//roundedRectangle->CornerRadius = float2(20, 20);
roundedRectangle->Offset = float2(20, 0);
clip->Geometry = roundedRectangle;

//auto visual = _compositor->CreateSpriteVisual();
//visual->Brush = _compositor->CreateColorBrush(ColorHelper::FromArgb(0xFF, 0xFF, 0x11, 0xFF));
visual->Size = float2(100+20, 100);
roundedRectangle->Size = visual->Size;
visual->Clip = clip;

关键是让visual的大小和clip的大小一样,并且给[=15=设置一个Offset 属性的值] 使圆角矩形的右侧部分超过 visual 的大小。 Offset第一个参数属性表示clipvisual之间的左右space。我将 Offset 的值设置为 float2(20, 0) 以使圆角矩形的右侧部分超过 visual 的大小。您可以根据需要调整 Offset 属性 的值。