1. ホーム
  2. wpf

[解決済み] WPFでグリッド行を非表示にする

2022-10-31 01:03:25

質問

シンプルな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" を選択した場合、カードの詳細を含む行を非表示にしたいと思います。この行をすでに非表示にしてフォームを開始するオプションはありません。

どのように解決するのですか?

行はVisibilityプロパティを持っていないので、他の人が言ったように、高さを設定する必要があります。 また、多くのビューでこの機能が必要な場合、コンバータを使用することもできます。

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