当 IsIndeterminate = true 时,WPF ProgressBar 不会缩小以适应内容
WPF ProgressBar not shrinking to fit content when IsIndeterminate = true
我有一个简单的 StackPanel
,其中包含 TextBlock
和 ProgressBar
。
启动时,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
绑定到 TextBlock
的 ActualWidth
。
<TextBlock MinWidth="150" Name="tb" HorizontalAlignment="Left" />
<ProgressBar MinHeight="20" IsIndeterminate="True"
Width="{Binding Path=ActualWidth, ElementName=tb, Mode=OneWay}"/>
我有一个简单的 StackPanel
,其中包含 TextBlock
和 ProgressBar
。
启动时,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
绑定到 TextBlock
的 ActualWidth
。
<TextBlock MinWidth="150" Name="tb" HorizontalAlignment="Left" />
<ProgressBar MinHeight="20" IsIndeterminate="True"
Width="{Binding Path=ActualWidth, ElementName=tb, Mode=OneWay}"/>