我有一个简单的WPF表单,表单上声明了一个Grid
。这个Grid
有一堆行:
<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详细信息的行。这不是一个选项,以启动该表单与此已隐藏。
发布于 2014-02-19 23:10:13
行没有可见性属性,因此,正如其他人所说,您需要设置高度。另一种选择是使用转换器,以防您在许多视图中需要此功能:
[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>
中
<RowDefinition Height="{Binding IsHiddenRow, Converter={StaticResource BoolToGridRowHeightConverter}}"></RowDefinition>
发布于 2015-08-13 17:33:13
折叠行或列的最好且干净的解决方案是使用DataTrigger,因此在您的示例中:
<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>
发布于 2010-06-27 16:26:57
也可以通过引用网格中的行,然后更改行本身的高度来执行此操作。
XAML
<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
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
虽然在网格中折叠元素也是可行的,但如果网格中有许多没有可以折叠的封闭元素的项,这会更简单一些。这将提供一个很好的替代方案。
https://stackoverflow.com/questions/2502178
复制相似问题