当 IsIndeterminate = true 时,WPF ProgressBar 不会缩小以适应内容

WPF ProgressBar not shrinking to fit content when IsIndeterminate = true

我有一个简单的 StackPanel,其中包含 TextBlockProgressBar

启动时,ProgressBar 的宽度是完美的 - 它已调整自身大小以适合其边界(被其兄弟 TextBlock 拉伸至“150”)。

然而,当 TextBlock 由于额外的文本(ProgressBar 很好地扩展以填充额外区域)而延伸到宽度超过 150 时,然后收缩,由于删除它的文本,进度条的宽度仍然存在。

只有在 IsIndeterminate = true

时才会发生这种情况

以下匆忙拼凑的代码将显示工作原理;

<Grid HorizontalAlignment="Center" VerticalAlignment="Center">
    <StackPanel>
        <TextBlock MinWidth="150" Name="tb"  HorizontalAlignment="Left"></TextBlock>
       <ProgressBar MinHeight="20" IsIndeterminate="True"/>
    </StackPanel>
</Grid>


public MainWindow()
{
    InitializeComponent();
    new Thread(() =>
    {
        Thread.Sleep(2000);
        App.Current.Dispatcher.Invoke(() =>
        {
            tb.Text = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
        });
        Thread.Sleep(1000);
        App.Current.Dispatcher.Invoke(() =>
        {
            tb.Text = "A";
        });
    }).Start();
}

您可以将进度条的 Width 绑定到 TextBlockActualWidth

<TextBlock MinWidth="150" Name="tb"  HorizontalAlignment="Left" />
<ProgressBar MinHeight="20" IsIndeterminate="True" 
    Width="{Binding Path=ActualWidth, ElementName=tb, Mode=OneWay}"/>