WPF ContentControl在可见性更改时不会折叠

时间:2014-08-01 14:08:10

标签: wpf

我有一个标签序列,我希望能够分成两个区域或重新组合成一个标签序列。应用程序将以一个标签序列

开始

Application initial state

允许用户拆分为第二个面板

Splitting the tab control into 2 areas

重新组合成一个标签控件。

Recombining the tab items

在这个阶段,我应该在第一张图像上显示相同的内容。但是,相反,ContentControl没有Collaspe,并且空间留在主网格中。还有一个GridSplitter分配两个区域(图像2中的白色条)。这似乎像预期的那样崩溃。是否有一些技巧可以让ContentControl崩溃?

这是XAML。这是一个布尔属性BottomTabDisplayed,它指示底部区域是否有任何控件:

    <Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <ContentControl x:Name="ControlContainerTopTab" Grid.Row="0">
        <TabControl SelectedIndex="{Binding SelectedIndex}"
                    >
            <TabControl.ItemContainerStyle>
            ...
            </TabControl.ItemContainerStyle>
        </TabControl>
    </ContentControl>
    <GridSplitter x:Name="GridSplitterTabControls"
                  Grid.Row="1"
                  Height="5"
                  HorizontalAlignment="Stretch"
                  VerticalAlignment="Center"
                  Visibility="{Binding BottomTabDisplayed,
                                       Converter={StaticResource VisiblityToBoolConverter}}" />
    <ContentControl Grid.Row="2" Visibility="{Binding BottomTabDisplayed, Converter={StaticResource VisiblityToBoolConverter}}">
        <TabControl SelectedIndex="{Binding SelectedBottomIndex}"
                    Visibility="{Binding BottomTabDisplayed,
                                         Converter={StaticResource VisiblityToBoolConverter}}"
                    >
            <TabControl.ItemContainerStyle>
            ...
            </TabControl.ItemContainerStyle>
        </TabControl>
    </ContentControl>
</Grid>

编辑1: 而且,这是转换器

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        bool isVisible = (bool)value;
        return (isVisible ? Visibility.Visible : Visibility.Collapsed);
    }

我刚注意到一些有趣的事情,如果GridSplitter没有改变,它会按预期工作。如果我移动GridSplitter,那么我得到空的空间。

编辑2:
移动GridSplitter时,Snoop会发生变化

Before moving the GridSplitter After moving the GridSplitter

1 个答案:

答案 0 :(得分:2)

如果您查看VisiblityToBoolConverter的代码,您很可能会看到它返回Hidden而不是Collapsed