StatusBar 中的 WPF ProgressBar 不会拉伸

Posted

技术标签:

【中文标题】StatusBar 中的 WPF ProgressBar 不会拉伸【英文标题】:WPF ProgressBar in StatusBar won't stretch 【发布时间】:2013-04-16 21:40:57 【问题描述】:

WPF 新手,我有以下 XAML

<Window x:Class="Wpf.RossKiosk.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Topmost="True" WindowStartupLocation="CenterScreen" WindowState="Maximized" ResizeMode="NoResize" WindowStyle="None">
<DockPanel LastChildFill="True">

    <StatusBar Name="StatusBarMain" Height="30"  DockPanel.Dock="Bottom">
        <StatusBarItem HorizontalContentAlignment="Left">
            <TextBlock x:Name="TextBlockStatus" Margin="5,0,0,0" />
        </StatusBarItem>
        <StatusBarItem HorizontalContentAlignment="Stretch">
            <ProgressBar x:Name="ProgressBarMain" IsIndeterminate="True" Height="15" />
        </StatusBarItem>
        <StatusBarItem HorizontalContentAlignment="Right">
            <TextBlock x:Name="TextBlockInfo" Margin="5,0,0,0" TextAlignment="Right" />
        </StatusBarItem>
    </StatusBar>

    <Grid Name="GridMain">

        <!-- Dynamically Created buttons -->


    </Grid>


</DockPanel>

我希望 ProgressBar 填充 StatusBar 的中心部分,但它只显示几个像素的宽度。有什么想法吗?

【问题讨论】:

尝试将所有状态栏项包装到一个网格中,看看它是否有效。 这对我有帮助,但我需要添加网格行和列定义以使其正常工作。

 &lt;Grid VerticalAlignment="Stretch" Horizo​​ntalAlignment="Stretch"高度=“自动”工具提示=“abc213”&gt; &lt;Grid.RowDefinitions&gt; &lt;RowDefinition Height="Auto"&gt;&lt;/RowDefinition&gt; &lt;RowDefinition Height="<i>"&gt;&lt;/RowDefinition&gt; &lt;/Grid.RowDefinitions&gt; &lt;Grid.ColumnDefinitions&gt; &lt;ColumnDefinition Width="</i>"&gt;&lt;/ColumnDefinition&gt; 
我无法格式化我的答案。请无视 答案在这里:***.com/questions/2068601/… 【参考方案1】:

这是由于StatusBar 默认使用DockPanel 来布置其子级。请看我的问答here。

【讨论】:

【参考方案2】:

您将需要使用网格。 DockPanel 或 StackPanel 不足以满足您的需求。 试试:

    <Grid>
    <StatusBar Name="StatusBarMain" Height="30" HorizontalAlignment="Stretch">
    <StatusBarItem HorizontalContentAlignment="Left">
        <TextBlock x:Name="TextBlockStatus" Margin="5,0,0,0" />
    </StatusBarItem>
    <StatusBarItem HorizontalContentAlignment="Stretch">
        <ProgressBar x:Name="ProgressBarMain" IsIndeterminate="True" Height="15" />
    </StatusBarItem>
    <StatusBarItem HorizontalContentAlignment="Right">
        <TextBlock x:Name="TextBlockInfo" Margin="5,0,0,0" TextAlignment="Right" />
    </StatusBarItem>
   </StatusBar>
    </Grid>

【讨论】:

投反对票原因:网格应该被包裹在 内,而不是在外面。【参考方案3】:

这对我有帮助,但我需要添加网格行和列定义以使其正常工作。

<Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="Auto" ToolTip="abc213">
          <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
        </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"></ColumnDefinition>

【讨论】:

【参考方案4】:

这会将进度条延伸到其容器

<StatusBarItem  Name="progressBarContainer">
    <ProgressBar Height="Binding ElementName=progressBarContainer, Path=ActualHeight" Width="Binding ElementName=progressBarContainer, Path=ActualWidth" Value="50" />
</StatusBarItem>

【讨论】:

以上是关于StatusBar 中的 WPF ProgressBar 不会拉伸的主要内容,如果未能解决你的问题,请参考以下文章

2021-08-24 WPF控件专题 StatusBar 控件详解

WPF 中的 StatusBarItem 类有啥意义?

WPF StatusBar控件

WPF,从用户控件中更新主窗口中的状态栏

Some beautiful Progress Bars in WPF

wpf 用啥字体