0

次の 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>

一部のラベルの可視性を変更し、さまざまなテキストを設定しながら(したがって、さまざまな長さ/幅.

その後、さまざまな機能があります。

  • プログラムの開始時に、ラベルの「ID なし」テキストはlabelID内部値に置き換えられます。幅が更新されます: OK
  • コードを実行すると、最初の 2 つのラベルの可視性が変更されますColumnDefinition.Widthが、更新されず、最初の 2 つのラベルのみが表示されます (4 つすべてが wrapPanel ActualWidth に収まる十分な場所がないためです:エラー!
  • Visibilityプロパティを最初の 2 つのラベルからCollapsedに変更すると、最初Visibleからすべてのラベルの可視性がVisibleになり、すべてのラベルが表示されます: OK
  • 前の状態から、最初の 2 つのラベルの可視性を に変更するCollapsedと、ColumnDefinition.Widthが更新され、ProgressBarが可能な限り広くなり、すべてのテキストが表示されます

誰でも私を助けてもらえますか?幅が更新されない理由がわかりません...

注:可視性は、次のコードを実行しているウィンドウで 2 つのボタンを使用して変更されます。

label_Dataset.Visibility = System.Windows.Visibility.Visible;
label_TotalDatasets.Visibility = System.Windows.Visibility.Visible;

編集:私の目標は、可能な最大幅を使用して ProgressBar を表示するために、最小スペース (1 行) を使用して可視ラベルを表示することです。

4

1 に答える 1