WPF переключатель между регионами с помощью кнопки переключения - PullRequest
0 голосов
/ 08 мая 2011

У меня есть вид, что при загрузке содержит панель инструментов вверху и две области внизу.

В настоящее время я использую сетку, поэтому:

  • строка 0 содержитпанель инструментов
  • строка 1 содержит регион1, а
  • строка 2 содержит регион 2.

На панели инструментов есть кнопка переключения, которая при нажатии полностью скрывает область1 и отображаетрегион 2, и наоборот.

Каков наилучший способ добиться этого?

Я пытался связать высоты 2 строк, чтобы изменить их на переключателе, но пространство не заполненоправильно.VerticalAlignment="Stretch" и HorizontalAlignment="Stretch" оба используются.

Я также пытался включить и отключить элемент управления, управляющий регионом, но это, похоже, не работает вообще.

Любые указатели какк тому, что я сделал, очень ценят!:)

Ответы [ 2 ]

1 голос
/ 08 мая 2011

Не уверен, что я полностью понимаю, что вы хотите.Как то так?

<DockPanel>
    <ToggleButton Name="viewToggle" DockPanel.Dock="Top">Toggle Region</ToggleButton>
    <Grid>
        <ContentControl>
            <TextBlock>I'm region 1</TextBlock>
            <ContentControl.Style>
                <Style>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ElementName=viewToggle, Path=IsChecked}" Value="False">
                            <Setter Property="ContentControl.Visibility" Value="Visible"></Setter>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding ElementName=viewToggle, Path=IsChecked}" Value="True">
                            <Setter Property="ContentControl.Visibility" Value="Hidden"></Setter>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </ContentControl.Style>
        </ContentControl>
        <ContentControl>
            <TextBlock>I'm region 2</TextBlock>
            <ContentControl.Style>
                <Style>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ElementName=viewToggle, Path=IsChecked}" Value="True">
                            <Setter Property="ContentControl.Visibility" Value="Visible"></Setter>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding ElementName=viewToggle, Path=IsChecked}" Value="False">
                            <Setter Property="ContentControl.Visibility" Value="Hidden"></Setter>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </ContentControl.Style>
        </ContentControl>
    </Grid>
</DockPanel>
0 голосов
/ 08 мая 2011

Я использовал для этой строки, которая также содержит region1 и region2.Visibility для region2 по умолчанию установлено на Collapsed, и когда событие произошло (флажок для меня, привязан к значению bool), я переключил видимость регионов.Мои «регионы» содержали два разных макета, и у меня не возникало никаких проблем.

Быстрый пример кода без кода:

<Grid>
  <Grid.RowDefinitions>
    <RowDefinition Height="Auto" />
    <RowDefinition />
  </Grid.RowDefinitions>

  <Grid.Resources>
    <Style x:Key="showOnToggled" TargetType="GroupBox" BasedOn="{StaticResource {x:Type GroupBox}}" >
      <Setter Property="Visibility" Value="Visible" />
      <Style.Triggers>
        <DataTrigger Binding="{Binding ElementName=toggleButton, Path=IsChecked}" Value="True" >
          <Setter Property="Visibility" Value="Collapsed" />
        </DataTrigger>
      </Style.Triggers>
    </Style>

    <Style x:Key="hideOnToggled" TargetType="GroupBox" BasedOn="{StaticResource {x:Type GroupBox}}" >
      <Setter Property="Visibility" Value="Collapsed" />

      <Style.Triggers>
        <DataTrigger Binding="{Binding ElementName=toggleButton, Path=IsChecked}" Value="True" >
          <Setter Property="Visibility" Value="Visible" />
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </Grid.Resources>

  <ToggleButton Content="Switch Region"
                Grid.Row="0"
                x:Name="toggleButton" />

  <GroupBox Header="Region1"
            Grid.Row="1"
            Style="{StaticResource showOnToggled}" >
    <!-- Region1's content -->
  </GroupBox>

  <GroupBox Header="Region2"
            Grid.Row="1"
            Style="{StaticResource hideOnToggled}" >
    <!-- Region2's content -->
  </GroupBox>
</Grid>
...