WPF Splitter可见性

时间:2011-10-27 22:26:00

标签: wpf gridsplitter

<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中的某些条件设置了第一个内容控件和拆分器的可见性。但是如果我在运行时调整分割器的大小,那么在最后一个内容控件之前会显示一些空白空间。当我将第一个内容控件和拆分器设置为折叠时,我需要内容控件占用完整的空间吗?

感谢帮助。

3 个答案:

答案 0 :(得分:2)

问题是GridSplitterColumnDefinitions混淆,一旦你抓住第一列,将不再是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,则应解决您的问题。