如何在图像控件上添加单独的圆角

How to add individual rounded corners on an Image Control

关于如何单独设置图像控件(或 Window 控件内的任何控件)的角,我遇到了问题。使用 <Border> 标签在外边框内添加另一个像素或边框,这与我想要的相反 - 外边框和内边框应该在重叠的地方合并。

我试过哪个确实能给我单独的角尺寸。但是,它在外边框下方添加了另一层边框 - 我宁愿它 overlaps/merges 与外层一起使用,以便我保持其厚度大小。然而,为 <Image> 控件尝试 <Image.Clip> 并不能给我修改单个角的自由。

下面的代码在 <Image> 控件下使用 <Image.Clip> 产生上述结果:

<Border CornerRadius="10" BorderBrush="White" BorderThickness="1">
    <Canvas Background="Transparent">
        <!--Acrylic Background-->
        <Rectangle
            Fill="White" Opacity="0.4"
            Height="400" Width="600">
            <Rectangle.Clip>
                <RectangleGeometry Rect="0,0,600,400" RadiusX="9" RadiusY="9" />
            </Rectangle.Clip>
        </Rectangle>

        <Image Height="200" Width="400" Source="D:\_\Downloads\shutterstock_389224732-1200x627.jpg" RenderTransformOrigin="0.5,0.5" Canvas.Left="-100" Canvas.Top="100" Stretch="Fill">
            <Image.Clip>
                <RectangleGeometry Rect="0,0,400,200" RadiusX="10" RadiusY="10" />
            </Image.Clip>

            <Image.RenderTransform>
                <TransformGroup>
                    <RotateTransform Angle="90"/>
                </TransformGroup>
            </Image.RenderTransform>
        </Image>
    </Canvas>
</Border>

下面的代码使用环绕控件(例如)产生上述结果:

<Border CornerRadius="10" BorderBrush="White" BorderThickness="1">
    <Canvas Background="Transparent">
        <!--Acrylic Background-->
        <Rectangle
            Fill="White" Opacity="0.4"
            Height="400" Width="600">
            <Rectangle.Clip>
                <RectangleGeometry Rect="0,0,600,400" RadiusX="9" RadiusY="9" />
            </Rectangle.Clip>
        </Rectangle>

        <Border CornerRadius="9,0,0,9" BorderBrush="Red" BorderThickness="1">
            <Canvas Height="398" Width="198">

            </Canvas>
        </Border>
    </Canvas>
</Border>

注意下面来自代码 A 和 B 的缩放结果:

这表明 <Image.Clip> 自动将所有四个角(左上角、右上角、左下角、右下角)圆角化,而无需添加额外的边框像素。虽然使用 <Border> 我可以自由地手动选择圆角(左上角,左下角),但它会添加另一个边框像素(如您所见的白色和红色像素)。

我正在寻找 <Image.Clip> 的功能,但可以自由地手动 select 剪辑哪些角,同时也不会添加额外的角像素,因为我正在努力实现以下 [=52] =]:

所以从技术上讲,我试图只剪裁图像的左上角和左下角以匹配 window 左侧的角。

干杯!

 <Grid
        Width="400"
        Height="600"
        Margin="0,0,0,0"
        HorizontalAlignment="Left"
        VerticalAlignment="Top">

        <!--  Add rounded corners here  -->
        <Border
            Name="Mask"
            Grid.RowSpan="2"
            Margin="-5"
            Background="Black"
            CornerRadius="18 0 0 18" />

        <!--  Image  -->
        <Grid Grid.RowSpan="2">
            <Grid.OpacityMask>
                <VisualBrush Visual="{Binding ElementName=Mask}" />
            </Grid.OpacityMask>

            <Image
                Margin="-5"
                Source="{StaticResource UsmanImageSource}"
                Stretch="UniformToFill" />
        </Grid>

    </Grid>