<Grid x:Name="LayoutRoot" Background="White">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<ContentControl Grid.Row="1" Grid.Column="0" Content="{Binding Path=CurrentNavigationView}" Visibility="{Binding NavigationPageVisibility}" Margin="2"/>
<GridSplitter Grid.Row="1" Grid.Column="1" Width="3" Margin="1,6,1,6" Visibility="{Binding NavigationPageVisibility}" HorizontalAlignment="Center" Background="{StaticResource NetApp_LightGray_Brush}" />
<ContentControl Grid.Row="1" Grid.Column="2" Margin="2" Visibility="{Binding WelcomePageVisibility}" Content="{Binding Path=CurrentWelcomeView}" />
</Grid>
在上面的xaml中,我根据ViewModel中的某些条件设置了第一个内容控件和拆分器的可见性。但是如果我在运行时调整分割器的大小,那么在最后一个内容控件之前会显示一些空白空间。当我将第一个内容控件和拆分器设置为折叠时,我需要内容控件占用完整的空间吗?
感谢帮助。
答案 0 :(得分:2)
问题是GridSplitter
与ColumnDefinitions
混淆,一旦你抓住第一列,将不再是Auto
,而是具体的像素值。这是一个显示这个的例子:
<Grid Height="100">
<Grid.ColumnDefinitions>
<ColumnDefinition Name="c0" Width="Auto"/>
<ColumnDefinition Name="c1" Width="Auto"/>
<ColumnDefinition Name="c2" Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding Width, ElementName=c0}"/>
<TextBlock Grid.Column="2" Text="{Binding Width, ElementName=c2}"/>
<GridSplitter Grid.Column="1" Width="5" ResizeBehavior="PreviousAndNext"/>
</Grid>
因此,如果您希望它再次可折叠,则需要将Width
返回Auto
。
答案 1 :(得分:1)
@Arihant,
1]尝试GridSplitter.HorizontalAlignment
作为Stretch
。
2]您的GridSplitter.Background
是否明智,显示分割器?
3] Visibility="{Binding NavigationPageVisibility}"
绑定是否有效?您是否在Visual Studio的Output
窗口中看到此绑定的任何绑定错误?
NavigationPageVisibility
类型Visibility
和价值Visibility.Visible
许多开发人员将此类NavigationPageVisibility
属性声明为boolean。这没有约束力。
4]尝试删除Margin="1,6,1,6"
。它有时会将分离器从可见区域移开。
5]你不应该有Grid.Row="1"
。拆分器必须始终位于Row="0"
且最大Grid.RowSpan
。我将我的定为99。
答案 2 :(得分:0)
狂野猜测:您将可见性设置为Visibility.Hidden
这只隐藏了控件,但它们保留了空间。
如果您将可见性设置为Visibility.Collapsed
,则应解决您的问题。