我有以下 XAML 代码:
<Grid Grid.Row="2" Name="grid_StatusBar">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="{Binding ElementName=wrapPanel, Path=ActualWidth}" />
<ColumnDefinition Width="30" />
</Grid.ColumnDefinitions>
<ProgressBar Grid.Column="0" HorizontalAlignment="Stretch" Margin="5,5,5,5" Name="progressBar1" VerticalAlignment="Stretch" />
<WrapPanel Grid.Column="1" Name="wrapPanel" HorizontalAlignment="Right">
<Label Content="1" Height="28" HorizontalAlignment="Right" Margin="0,0,0,0" Name="label_Dataset" VerticalAlignment="Stretch" Visibility="Collapsed" />
<Label Content="/20" Height="28" HorizontalAlignment="Right" Margin="0,0,0,0" Name="label_TotalDatasets" VerticalAlignment="Stretch" Visibility="Collapsed" />
<Label Content="ID:" Height="28" HorizontalAlignment="Right" Margin="0,0,0,0" Name="label_IDText" VerticalAlignment="Stretch" />
<Label Content="no id" Height="28" HorizontalAlignment="Right" Margin="0,0,0,0" Name="labelID" VerticalAlignment="Stretch" />
</WrapPanel>
<Button Grid.Column="2" Name="button_Help" Height="30" Width="30" Content="?" HorizontalAlignment="Right" VerticalAlignment="Stretch" Click="button_Help_Click" >
</Grid>
我试图在更改某些标签的可见性并设置不同的文本(因此不同的长度/宽度)时尽可能宽地显示进度条。
然后我有不同的功能:
- 在程序开始时,标签的“no id”文本
labelID
被替换为内部值。宽度已更新:OK - 随着代码的运行,我改变了前两个标签的可见性,并且
ColumnDefinition.Width
没有更新,只显示前两个标签(因为没有足够的位置让所有 4 个标签都适合 wrapPanel ActualWidth:错误! - 如果我
Visibility
将前两个标签的属性从更改Collapsed
为Visible
,从一开始所有标签的可见性都是Visible
,并且所有标签都显示:OK - 从之前的状态,我将前两个标签的可见性更改为
Collapsed
,ColumnDefinition.Width
更新并且ProgressBar
尽可能宽,并且显示所有文本:OK
有人可以帮我吗?我不明白为什么宽度没有更新......
注意:使用运行以下代码的窗口中的两个按钮更改可见性:
label_Dataset.Visibility = System.Windows.Visibility.Visible;
label_TotalDatasets.Visibility = System.Windows.Visibility.Visible;
编辑:我的目标是使用最小空间(一行)显示可见标签,以便让 ProgressBar 使用可能的最大宽度。