首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何基于切换按钮显示/隐藏网格行和网格拆分器?

如何基于切换按钮显示/隐藏网格行和网格拆分器?
EN

Stack Overflow用户
提问于 2010-04-22 23:05:55
回答 1查看 2.9K关注 0票数 1

目前,我有一个切换按钮,它绑定到我的代码中的一个布尔属性(DualLayout)。当布尔值设置为True时,我希望网格(和网格拆分器)中的第二行隐藏起来,并让第一行占据整个网格空间。一旦布尔值设置为False,我希望网格拆分器和底行出现。

下面是我的xaml的一个片段

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

发布于 2010-04-22 23:38:12

这是未经测试的,但我相信它应该可以工作。

首先,如果希望第一行占据整个空间,则需要将RowDefinitions定义为

代码语言:javascript
复制
<Grid.RowDefinitions>
    <RowDefinition Height="*"/>
    <RowDefinition Height="Auto" />  <!-- Edit: Removed MinHeight="100" -->
</Grid.RowDefinitions>

为了显示/隐藏控件,您需要将它们的可见性属性绑定到DualLayout属性(如果该类正确地实现了INotifyPropertyChanged),或者(也许更简单)绑定到ToggleButton的IsChecked属性。

例如(GridSplitter也是如此):

代码语言:javascript
复制
<!-- 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资源:

代码语言:javascript
复制
<Window.Resources>
    <BooleanToVisibilityConverter x:Key="boolToVis" />
</Window.Resources>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2691977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档