WPF - 制作进度条按钮并使其大小合适
WPF - Making a progressbar button and having it properly size
我正在尝试在 WPF 中创建一个按钮,该按钮将显示进度但仍显示其按钮文本。
我尝试添加一个 Grid
作为按钮的子项并添加一个 ProgressBar
和 Label
到网格,认为 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
中,而不是它的 Template
。 ContentTemplate
的问题在于它有一些默认按钮的样式,例如您不喜欢的小边框。通过将其移动到按钮的整体模板,您是说我不关心默认按钮的外观,我希望它看起来完全像这个。
它看起来像什么:
如果您调整 window 的大小,它会是什么样子:
我正在尝试在 WPF 中创建一个按钮,该按钮将显示进度但仍显示其按钮文本。
我尝试添加一个 Grid
作为按钮的子项并添加一个 ProgressBar
和 Label
到网格,认为 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
中,而不是它的 Template
。 ContentTemplate
的问题在于它有一些默认按钮的样式,例如您不喜欢的小边框。通过将其移动到按钮的整体模板,您是说我不关心默认按钮的外观,我希望它看起来完全像这个。
它看起来像什么:
如果您调整 window 的大小,它会是什么样子: