WPFグリッド-コンテンツのVisibilityがVisibility.Collapsedに設定されている場合、自動サイズ調整された列は折りたたみません
-
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>
所属していません StackOverflow