WPF Splitter видимость - PullRequest
       7

WPF Splitter видимость

1 голос
/ 28 октября 2011
<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 я устанавливаю видимость 1-го элемента управления контентом и сплиттера, основываясь на некоторых условиях в моей ViewModel. Но когда я изменяю размер сплиттера во время работы, перед последним контролем содержимого отображается некоторое пустое пространство. Мне нужен контроль контента, чтобы занять всю недвижимость, когда я установил 1-й контроль контента и сплиттер свернутым?

Ценю помощь.

Ответы [ 3 ]

2 голосов
/ 28 октября 2011

Проблема в том, что 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 голос
/ 28 октября 2011

@ Арихант,

1] Попробуйте GridSplitter.HorizontalAlignment как Stretch.

2] Является ли ваш GridSplitter.Background достаточно разумным, чтобы отображать сплиттер?

3] Работает ли Visibility="{Binding NavigationPageVisibility}" переплет? Видите ли вы какие-либо ошибки привязки в вашем Output окне вашей Visual Studio для этой привязки?

Имеет ли NavigationPageVisibility тип Visibility и значение Visibility.Visible?

Многие разработчики объявляют такие свойства NavigationPageVisibility как логические. Это нарушает привязку.

4] Попробуйте удалить свой Margin="1,6,1,6". Иногда он может убрать сплиттер из видимой области.

5] У вас не должно быть Grid.Row="1". Разветвитель всегда должен быть на Row="0" и иметь максимум Grid.RowSpan, насколько это возможно. Я установил мой как 99.

0 голосов
/ 28 октября 2011

Дикая догадка: вы устанавливаете видимость на Visibility.Hidden

Это только скрывает контроль, но они сохраняют свое пространство.

Если вы установите видимость на Visibility.Collapsed, это должно решить вашу проблему.

...