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

时间:2019-02-12 01:21:01

标签: c# wpf rounded-corners

我在如何分别设置图像控件(或“窗口控件”内部的任何控件)的角落时遇到问题。使用<Border>标签在外边框内添加另一个像素或边框,这与我想要的相反-外边框和内边框应在重叠的位置合并。

我已经尝试过,但这确实给了我各个角落的大小。但是,它在外边界下方添加了另一层边界-我宁愿它与外层重叠/合并,以便保持其厚度大小。但是,为<Image.Clip>控件尝试<Image>并不能给我自由修改单个角的功能。

Code Result A

下面的代码使用<Image.Clip>控件下的<Image>,它会产生以上结果:

<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>

Code Result B

下面的代码使用了环绕Control的控件(例如),它产生了以上结果:

<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的缩放结果:

Code Result

它显示<Image.Clip>自动舍入所有四个角(左上,右上,左下,右下),而无需添加其他边框像素。使用<Border>时,我可以自由选择要倒圆的角(左上,左下),但是它会添加另一个边界像素(如您看到的白色和红色像素)。

我正在寻找<Image.Clip>的功能,但可以自由选择要裁剪的角,同时也不想在UI之下实现时添加额外的角像素:

Expected Result

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

干杯!

1 个答案:

答案 0 :(得分:1)

class PostCreateView(CreateView):
        model = Post
        template_name = 'blog/post_create.html'
        fields = ('title', 'slug', 'body', 'blog')


        def get_success_url(self):
            return self.post_instance.get_absolute_url()

        def form_valid(self, form):
            form.instance.blog.user = self.request.user
            self.post_instance = form.instance
            return super(PostCreateView,self).form_valid(form)