我有以下简化的WPf网格,两列,每列中的一个按钮,第一列自动调整大小以及允许列调整大小的拆分器。 在拆分器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;
}
答案 0 :(得分:8)
答案 1 :(得分:0)
在我的情况下,我能够使用StackPanels并设置导致它正确调整大小的Visibility="Collapsed"
。
<StackPanel Orientation="Vertical" Margin="5">
<StackPanel Orientation="Horizontal">
<!-- Some controls -->
</StackPanel>
<StackPanel Orientation="Horizontal" Visibility="{Binding YourVisibilityProperty}">
<!-- Some controls -->
</StackPanel>
</StackPanel>
答案 2 :(得分:-3)
这是因为分离器在网格中保持其位置,它拉出第一列,为什么不尝试扩展器呢?
<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>