WPFグリッド-コンテンツのVisibilityがVisibility.Collapsedに設定されている場合、自動サイズ調整された列は折りたたみません

StackOverflow https://stackoverflow.com/questions/1601171

  •  05-07-2019
  •  | 
  •  

質問

次の単純なWPfグリッド、2つの列、各列のボタン、最初の列の自動サイズ調整、および列のサイズ変更を可能にするスプリッターがあります。 イベントハンドラーは、スプリッターMouseDoubleclickイベントに設定されます。スプリッターがダブルクリックされると、左の列のボタンが折りたたまれます。

今、列1は自動サイズ調整され、コンテンツが折りたたまれているため、この時点で列1は事実上非表示になるはずですが、そうではありません。 そのコンテンツは折りたたまれていますが、列のサイズは変更されません(記憶列は自動サイズ変更されます)。

私には奇妙に思えますが、列を折りたたんでください-ここで何が起こっているのでしょうか?

<Window x:Class="KingLayout.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition />
        </Grid.RowDefinitions>
        <Button x:Name="leftButton">Left</Button>
        <Button Grid.Column="1" Margin="5,0,0,0">Right</Button>
        <GridSplitter Name="verticalSplitter" ShowsPreview="True" Grid.RowSpan="1" Grid.Column="1" HorizontalAlignment="Left"
                      VerticalAlignment="Stretch" Width="5" MouseDoubleClick="verticalSplitter_MouseDoubleClick"/>
    </Grid>
</Window>


    private void verticalSplitter_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        leftButton.Visibility = leftButton.Visibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible;
    }
役に立ちましたか?

解決

GridSplitterで列/行の幅/高さのサイズを変更すると、列/行のActualHeight(またはActualWidth)が設定されます。

コントロールが折りたたまれている場合、トリガーを使用して行の高さを自動(またはゼロ)に設定する必要があります。

これで最新情報を入手してください。

他のヒント

私の場合、StackPanelsを使用して、 Visibility =&quot; Collapsed&quot; を設定することで、適切にサイズ変更することができました。

<StackPanel Orientation="Vertical" Margin="5">
    <StackPanel Orientation="Horizontal">
      <!-- Some controls -->
    </StackPanel>
    <StackPanel Orientation="Horizontal" Visibility="{Binding YourVisibilityProperty}">
      <!-- Some controls -->
    </StackPanel>
</StackPanel>

これは、スプリッターがグリッド内の位置を保持し、最初の列をプルするためです。エキスパンダーを試してみませんか?

<Grid ShowGridLines="True">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition />
    </Grid.RowDefinitions>
    <Expander ExpandDirection="Left">
        <Button x:Name="leftButton">Left</Button>
    </Expander>
    <Button Grid.Column="1" Margin="5,0,0,0">Right</Button>
</Grid>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top