使用一个圆角的自定义形状按钮

13

我需要在WPF中创建一个具有自定义形状的按钮,特别地,我希望它具有像椭圆形一样的圆角。 这是一张图片:

只有黑色区域应该是点击目标;白色区域应该是透明的。

如何在WPF中创建一个具有这种自定义形状的按钮控件? 我知道如何创建常规矩形按钮,但不知道如何创建这样的圆角按钮。


1
此问题已在 Meta 上讨论:重新开放带有好答案的“低劣”问题? - Sebastian Simon
1个回答

28

你可以使用控件模板来实现这个目标:

<Style x:Key="ButtonStyle" TargetType="{x:Type Button}">
        <Setter Property="Background" Value="Black"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Path Fill="{TemplateBinding Background}"
                            Data="M 0,0 A 100,100 90 0 0 100,100 L 100,100 100,0" />
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

然后将其应用于按钮:

<Button Style="{StaticResource ButtonStyle}"/>

如果你需要一些参考来绘制“路径”,请查看MSDN链接。

更新

要显示内容,您应该使用ContentPresenter,类似于下面这样:

<Style x:Key="ButtonStyle" TargetType="{x:Type Button}">
        <Setter Property="Background" Value="Black"/>
        <Setter Property="HorizontalAlignment" Value="Center"/>
        <Setter Property="VerticalContentAlignment" Value="Center"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Grid>
                        <Path Fill="{TemplateBinding Background}"
                            Data="M 0,0 A 100,100 90 0 0 100,100 L 100,100 100,0" />
                        <ContentPresenter VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                          HorizontalAlignment="{TemplateBinding HorizontalAlignment}"/>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

在按钮中:

<Button Style="{StaticResource ButtonStyle}" Foreground="White">
        test
    </Button>

在此输入图片描述


1
谢谢,伙计!它起作用了。但是,我想知道我该如何为此设置内容?当我将内容设置为按钮时,它不会显示出来。 - Prabash Darshana
1
要显示内容,您应该插入一个ContentPresenter。 - cbcol

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接