首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在WPF中隐藏网格行

在WPF中隐藏网格行
EN

Stack Overflow用户
提问于 2010-03-24 01:31:48
回答 7查看 94.3K关注 0票数 106

我有一个简单的WPF表单,表单上声明了一个Grid。这个Grid有一堆行:

代码语言:javascript
复制
<Grid.RowDefinitions>
    <RowDefinition Height="Auto" MinHeight="30" />
    <RowDefinition Height="Auto" Name="rowToHide" />
    <RowDefinition Height="Auto" MinHeight="30" />
</Grid.RowDefinitions>

名为rowToHide的行包含一些输入字段,我希望在检测到不需要这些字段后隐藏此行。将Visibility = Hidden设置为行中的所有项很简单,但是该行仍然占用Grid中的空间。我尝试将Height = 0设置为这些项,但似乎不起作用。

你可以这样想:你有一个表单,里面有一个下拉列表,上面写着"Payment Type",如果用户选择了"Cash",你想隐藏包含Card详细信息的行。这不是一个选项,以启动该表单与此已隐藏。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2014-02-19 23:10:13

行没有可见性属性,因此,正如其他人所说,您需要设置高度。另一种选择是使用转换器,以防您在许多视图中需要此功能:

代码语言:javascript
复制
    [ValueConversion(typeof(bool), typeof(GridLength))]
    public class BoolToGridRowHeightConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return ((bool)value == true) ? new GridLength(1, GridUnitType.Star) : new GridLength(0);
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {    // Don't need any convert back
            return null;
        }
    }

然后在适当的视图<Grid.RowDefinition>

代码语言:javascript
复制
<RowDefinition Height="{Binding IsHiddenRow, Converter={StaticResource BoolToGridRowHeightConverter}}"></RowDefinition>
票数 96
EN

Stack Overflow用户

发布于 2015-08-13 17:33:13

折叠行或列的最好且干净的解决方案是使用DataTrigger,因此在您的示例中:

代码语言:javascript
复制
<Grid>
    <Grid.RowDefinitions>
      <RowDefinition Height="Auto" MinHeight="30" />
      <RowDefinition Name="rowToHide">
        <RowDefinition.Style>
          <Style TargetType="{x:Type RowDefinition}">
            <Setter Property="Height" Value="Auto" />
            <Style.Triggers>
              <DataTrigger Binding="{Binding SomeBoolProperty}" Value="True">
                <Setter Property="Height" Value="0" />
              </DataTrigger>
            </Style.Triggers>
          </Style>
        </RowDefinition.Style>
      </RowDefinition>
      <RowDefinition Height="Auto" MinHeight="30" />
    </Grid.RowDefinitions>
  </Grid>
票数 84
EN

Stack Overflow用户

发布于 2010-06-27 16:26:57

也可以通过引用网格中的行,然后更改行本身的高度来执行此操作。

XAML

代码语言:javascript
复制
<Grid Grid.Column="2" Grid.Row="1" x:Name="Links">
   <Grid.RowDefinitions>
      <RowDefinition Height="60" />
      <RowDefinition Height="*" />
      <RowDefinition Height="*" />
      <RowDefinition Height="80" />
   </Grid.RowDefinitions>
</Grid>

VB.NET

代码语言:javascript
复制
If LinksList.Items.Count > 0 Then
   Links.RowDefinitions(2).Height = New GridLength(1, GridUnitType.Star)
Else
   Links.RowDefinitions(2).Height = New GridLength(0)
End If

虽然在网格中折叠元素也是可行的,但如果网格中有许多没有可以折叠的封闭元素的项,这会更简单一些。这将提供一个很好的替代方案。

票数 55
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2502178

复制
相关文章

相似问题

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