Как я могу показать / скрыть строку сетки и разделитель сетки на основе кнопки переключения? - PullRequest
1 голос
/ 22 апреля 2010

В настоящее время у меня есть кнопка переключения, которая связана с логическим свойством (DualLayout) в моем коде позади. Когда логическое значение установлено в True, тогда я хочу, чтобы моя вторая строка в моей сетке (и разделитель сетки) скрывалась, и чтобы первая строка занимала все пространство сетки. После того, как логическое значение установлено в False, я хочу, чтобы появился разделитель сетки и нижний ряд.

Вот фрагмент моего xaml

<ToggleButton Name="toggleLayout" Margin="66,1,0,1" Width="25" HorizontalAlignment="Left" IsChecked="{Binding DualLayout}" Checked="toggleLayout_Clicked" Unchecked="toggleLayout_Clicked">
            <ToggleButton.Style>
                <Style TargetType="{x:Type ToggleButton}">
                    <Style.Triggers>
                        <Trigger Property="IsChecked" Value="true">
                            <Setter Property="ContentTemplate">
                                <Setter.Value>
                                    <DataTemplate DataType="{x:Type ToggleButton}">
                                        <Image Source="Images/PlayHS.png"/>
                                    </DataTemplate>
                                </Setter.Value>
                            </Setter>
                            <Setter Property="ToolTip" Value="Receive and Transmit Windows Split."/>
                        </Trigger>
                        <Trigger Property="IsChecked" Value="false">
                            <Setter Property="ContentTemplate">
                                <Setter.Value>
                                    <DataTemplate DataType="{x:Type ToggleButton}">
                                        <Image Source="Images/PauseHS.png"/>
                                    </DataTemplate>
                                </Setter.Value>
                            </Setter>
                            <Setter Property="ToolTip" Value="Receive and Transmit Windows Combined."/>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </ToggleButton.Style>
        </ToggleButton>
    <Grid x:Name="transmissionsGrid" Margin="0,28,0,0">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*" MinHeight="100" />
        </Grid.RowDefinitions>
        <transmission:TransmissionsControl x:Name="transmissionsReceive" TransmissionType="Receive" Margin="0,0,0,5" />
        <GridSplitter Name="gridSplitter1" Grid.Row="0" Background="White" Cursor="SizeNS" Height="4" HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Foreground="Firebrick"  />
        <transmission:TransmissionsControl x:Name="transmissionsTransmit" TransmissionType="Transmit" Grid.Row="1"  />
    </Grid>

1 Ответ

1 голос
/ 22 апреля 2010

Это не проверено, но я считаю, что это должно работать.

Во-первых, если вы хотите, чтобы ваша первая строка занимала все пространство, вы должны определить ваши RowDefinitions как

<Grid.RowDefinitions>
    <RowDefinition Height="*"/>
    <RowDefinition Height="Auto" />  <!-- Edit: Removed MinHeight="100" -->
</Grid.RowDefinitions>

Для отображения / скрытия элементов управления вам необходимо привязать их свойство Visibility либо к свойству DualLayout (если класс правильно реализует INotifyPropertyChanged), либо (возможно, более просто) к свойству IsChecked ToggleButton.

Например (то же самое относится и к GridSplitter):

<!-- EDIT: Added MinHeight="100" here instead -->
<transmission:TransmissionsControl x:Name="transmissionsTransmit"
               TransmissionType="Transmit" 
               Grid.Row="1"
               MinHeight="100"
               Visibility={Binding ElementName=toggleLayout,
                                   Path=IsChecked,
                                   Converter={StaticResource boolToVis}}"  />

На некотором уровне выше рассматриваемых элементов управления (здесь я делаю это на уровне окна) вам необходимо добавить встроенный ресурс BooleanToVisibilityConverter:

<Window.Resources>
    <BooleanToVisibilityConverter x:Key="boolToVis" />
</Window.Resources>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...