WPF:折叠GridSplitter?

标签 wpf xaml gridsplitter

我有一个 WPF 页面,上面有一个网格。

共有三行。第 0 行包含一个 Height="*" 的 GridView。第 1 行包含一个带有 Height="auto" 的 GridSplitter。第 2 行包含带有 Height="2*" 的详细信息表单。

事情是这样的 - 我有一个按钮,应该可以切换详细信息表单的可见性。这效果很好。除了它只是隐藏第 2 行中的表单之外,它不会扩展第 0 行中的网格来填充空间。我想要的是按钮切换第 0 行中的 GridView 以占据所有空间,然后切换回原来的位置。

显然,调整行内表单的可见性并不能达到我想要的效果。

但是我需要玩什么?

最佳答案

如果有人想要纯粹的 XAML 解决方案,我可以想出一种使用样式、 setter 和触发器来隐藏拆分器和相关行的方法。

我为我的样式使用了静态资源,该资源设置为在设置特定绑定(bind) bool 值时更改 HeightMaxHeight

<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/

相关文章:

c# - 无论属性值如何,WPF 动画都会触发

c# - 以编程方式设置网格内列的宽度

WPF 拆分器可见性

c# - 页面生命周期

c# - 如何创建带链接的 DataTemplate

c# - 使用 DesignInstance 将数据上下文绑定(bind)到 View

c# - 选择 ComboBox 中的项目会影响不相关的 ComboBox

wpf - GridSplitter 覆盖 ColumnDefinition 的样式触发器?

wpf - 您如何导航复杂的可视化树以重新绑定(bind)现有元素?

c# - 将文本转换为图像?