У меня есть простая форма 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
элементы, но, похоже, это не сработало.
Вы можете думать об этом так: у вас есть форма, в ней есть раскрывающийся список с надписью «Тип платежа», и если человек выбирает «Наличные», вы хотите скрыть строку, содержащую данные карты. Невозможно запустить форму с этим уже скрытым.
Ответы:
У строки нет свойства видимости, поэтому, как говорили другие, вам нужно установить высоту. Другой вариант - использовать конвертер, если вам нужна эта функция во многих представлениях:
А затем в соответствующем виде
<Grid.RowDefinition>
:источник
BoolToGridLengthConverter
и добавитьVisibleLength
-Property, чтобы вернуться(bool)value == true
. Вот как вы также можете повторно использовать его сAuto
любым фиксированным значением.Лучшее и чистое решение для свертывания строк или столбцов - использовать DataTrigger, поэтому в вашем случае:
источник
INotifyPropertyChanged
в своем коде, чтобы он работал приSomeBoolProperty
изменении :).Вы также можете сделать это, указав строку в сетке, а затем изменив высоту самой строки.
XAML
VB.NET
Хотя сворачивание элементов в сетке также работает, это немного проще, если у вас есть много элементов в сетке, которые не имеют закрывающего элемента, который можно свернуть. Это было бы хорошей альтернативой.
источник
RowDefinition
, вроде<RowDefinition Height="*" /><!-- Height set in code behind -->
Для справки,
Visibility
это перечисление System.Windows.Visibility с тремя состояниями :См. Этот совет и другие советы в ветке WPF Tips and Tricks .
источник
Вместо того, чтобы возиться со строкой сетки, вы можете установить для свойства Visibility элементов управления (полей в строке) значение «Collapsed». Это гарантирует, что элементы управления не занимают места, и если у вас есть Grid Row Height = "Auto", то строка будет скрыта, так как все элементы управления в строке имеют Visibility = "Collapsed".
Этот метод лучше, потому что видимость элементов управления может быть привязана к какому-либо свойству с помощью конвертера.
источник
Просто сделайте это:
rowToHide.Height = new GridLength(0);
если вы будете использовать,
visibility.Collapse
то вам нужно установить его для каждого члена строки.источник
Установите видимость содержимого строки
Visibility.Collapsed
вместо «Скрытый». Это заставит контент перестать занимать место, а строка соответственно уменьшится.источник
У меня была аналогичная идея, унаследовав RowDefinition (просто для интереса)
Теперь вы можете использовать его следующим образом:
и переключиться с помощью
источник