可调整大小的圆形按钮 xaml

Resizable circle button xaml

我正在 XAML/C# 中为 Windows 开发一个通用应用程序,但我无法创建一个可以调整大小的圆形按钮。我使用一个具有均匀拉伸的 Ellipse 使其成为圆形,并使用一个 ContentPresenter。

    <ControlTemplate TargetType="Button">
        <Grid>
            <Ellipse Stretch="Uniform">
            <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
        </Grid>
    </ControlTemplate>

问题是一个均匀的椭圆会自动左上对齐,而且不可能拉伸网格。当我调整按钮大小时,ContentPresenter 停留在中心,而椭圆停留在左上角。我希望能够调整按钮的大小并且文本保持在圆圈的中心。 感谢您的帮助!

您可以使用带有圆形 EllipseGeometry 的路径:

<ControlTemplate TargetType="Button">
    <Grid>
        <Path Stretch="Uniform" ...>
            <Path.Data>
                <EllipseGeometry RadiusX="1" RadiusY="1"/>
            </Path.Data>
        </Path>
        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
    </Grid>
</ControlTemplate>

然而,您必须明确设置按钮的宽度或高度,否则它将占用所有可用的 space。

我还找到了另一种解决方案,即使用 ViewBox:

<ControlTemplate TargetType="Button">
    <ViewBox>
        <Grid>
            <Ellipse Stretch="Uniform" Width="50" Height="50">
            <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
        </Grid>
    </ViewBox>
</ControlTemplate>

ViewBox 在调整大小时会自动缩放所有内容。您必须设置宽度和高度,但这只是为了设置比例。将用户控件与 Windows 和 Windows Phone 一起使用时非常有用。 感谢您的回答!