圆角仅在视觉对象的一侧
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
第一个参数属性表示clip
和visual
之间的左右space。我将 Offset
的值设置为 float2(20, 0)
以使圆角矩形的右侧部分超过 visual
的大小。您可以根据需要调整 Offset
属性 的值。
我想要一个 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
第一个参数属性表示clip
和visual
之间的左右space。我将 Offset
的值设置为 float2(20, 0)
以使圆角矩形的右侧部分超过 visual
的大小。您可以根据需要调整 Offset
属性 的值。