我有一个 WPF 页面,上面有一个网格。
共有三行。第 0 行包含一个 Height="*"
的 GridView。第 1 行包含一个带有 Height="auto"
的 GridSplitter。第 2 行包含带有 Height="2*"
的详细信息表单。
事情是这样的 - 我有一个按钮,应该可以切换详细信息表单的可见性。这效果很好。除了它只是隐藏第 2 行中的表单之外,它不会扩展第 0 行中的网格来填充空间。我想要的是按钮切换第 0 行中的 GridView 以占据所有空间,然后切换回原来的位置。
显然,调整行内表单的可见性并不能达到我想要的效果。
但是我需要玩什么?
最佳答案
如果有人想要纯粹的 XAML 解决方案,我可以想出一种使用样式、 setter 和触发器来隐藏拆分器和相关行的方法。
我为我的样式使用了静态资源,该资源设置为在设置特定绑定(bind) bool 值时更改 Height
和 MaxHeight
。
<Style x:Key="showRow" TargetType="{x:Type RowDefinition}">
<Style.Setters>
<Setter Property="Height" Value="*"/>
</Style.Setters>
<Style.Triggers>
<DataTrigger Binding="{Binding MyShowRowBool}" Value="False">
<DataTrigger.Setters>
<Setter Property="Height" Value="0"/>
<Setter Property="MaxHeight" Value="0"/>
</DataTrigger.Setters>
</DataTrigger>
</Style.Triggers>
</Style>
我只是将样式应用于相关的行定义,它就像一个魅力:
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Style="{StaticResource showRow}"/>
<RowDefinition Style="{StaticResource showRow}"/>
</Grid.RowDefinitions>
值得注意的是,我在没有 MaxHeight 属性的情况下尝试了它,并且它没有正确折叠。添加它似乎对我来说已经成功了。
关于WPF:折叠GridSplitter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12483017/