WPF - 制作进度条按钮并使其大小合适

WPF - Making a progressbar button and having it properly size

我正在尝试在 WPF 中创建一个按钮,该按钮将显示进度但仍显示其按钮文本。

我尝试添加一个 Grid 作为按钮的子项并添加一个 ProgressBarLabel 到网格,认为 Grid 将填充按钮并且在进度条和标签上使用 VerticalAlignment="Stretch" HorizontalAlignment="Stretch" 基本上会得到一个可点击的进度条,它可以显示进度并在其顶部有一个标签。但是,我遇到了尺码问题。

这是我的 XAML:

        <Button Grid.Column="0" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" MinWidth="100" MinHeight="25" Margin="3">
            <Grid>
                <ProgressBar Value="10" Maximum="20" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
                <Label Content="asd2" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" VerticalContentAlignment="Center" HorizontalContentAlignment="Center"/>
            </Grid>
        </Button>

这是我看到的:

如果我更改为显式调整大小:

        <Button Grid.Column="0" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" MinWidth="100" MinHeight="25" Margin="3">
            <Grid>
                <ProgressBar Value="10" Maximum="20" Width="100" Height="30" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
                <Label Content="asd2" Width="100" Height="30" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" VerticalContentAlignment="Center" HorizontalContentAlignment="Center"/>
            </Grid>
        </Button>

我明白了:

从视觉上看,这是一个改进,但 XAML- 编程上更糟,因为我希望按钮随 window 调整大小,如果用户看不清楚或其他原因像那样。此外,在视觉上 - 我不喜欢实际按钮和进度条开始之间的小边界,我尝试将 "padding" 和 "margin" 都设置为 0,但不是这样。

我希望看到的 - 进度条占据了按钮的所有 space 并且标签文本在垂直和水平方向都保持居中,相对于按钮的总大小。

将您的 <Grid> 放入 ControlTemplate 并覆盖您的 <Button.Template>:

        <Button Grid.Column="0" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" MinWidth="100" MinHeight="25" Margin="3">
            <Button.Template>
                <ControlTemplate TargetType="Button">
                    <Grid>
                        <ProgressBar Value="10" Maximum="20" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
                        <Label Content="asd2" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" VerticalContentAlignment="Center" HorizontalContentAlignment="Center"/>
                    </Grid>
                </ControlTemplate>            
            </Button.Template>
        </Button>    

您之前所做的是将 <Grid> 放在 Button 的 ContentTemplate 中,而不是它的 TemplateContentTemplate 的问题在于它有一些默认按钮的样式,例如您不喜欢的小边框。通过将其移动到按钮的整体模板,您是说我不关心默认按钮的外观,我希望它看起来完全像这个。

它看起来像什么:

如果您调整 window 的大小,它会是什么样子: