Visibility.CollapsedとVisibility.Hiddenの違い


287

WPF Visibility.Collapsedとの違いは何Visibility.Hiddenですか?


4
非表示と折りたたみの間にパフォーマンスの違いはありますか?折りたたまれているオブジェクトのインスタンスはありますか?
Bulli 2012

@Bulliはい、パフォーマンスの違いがあります。非表示のコントロールは引き続きレイアウトパスの対象になりますが、折りたたまれたコントロールはレイアウトされません。したがって、たとえば、大きなグリッドは、その可視性が非表示の場合にパフォーマンスに悪影響を与える可能性があります。
マリウスヘルツォーク

回答:


426

違いはVisibility.Hidden、コントロールを非表示にすることですが、レイアウト内で占有するスペースを予約します。したがって、コントロールではなく空白をレンダリングします。 Visibilty.Collapsedコントロールレンダリングせず、空白を予約しません。コントロールが取るスペースは「折りたたまれている」ため、名前が付けられます。

MSDNからの正確なテキスト:

折りたたみ:要素を表示せず、レイアウトでその要素のスペースを予約しません。

非表示:要素を表示せず、レイアウト内の要素用にスペースを予約します。

表示:要素を表示します。

参照:http : //msdn.microsoft.com/en-us/library/system.windows.visibility.aspx


2
つまり、コントロールが折りたたまれている場合、コントロールの幅と高さはゼロに設定されます。
サウロン

27
まあ、レイアウトに関しては、そうです。もちろん、幅と高さをゼロに設定するだけではありません。Visibilityが折りたたまれている場合、コントロールにフォーカスを置くことはできません。TABキーなどを使用してコントロールに移動することはできません。すべてのコントロールの高さと幅がゼロである場合でも、コントロールを移動できます。しかし、繰り返しになりますが、レイアウトに関しては、それを言うことができます。
Razzie、

3
WebBrowserコントロールでHidden(次にVisible)を使用すると、非常に一貫性のない結果になることがわかりました。Collapsed(その後Visible)を使用した方がうまくいくようです。
Ternary 2012年

まだ「アクティブ」な折りたたまれたコントロールです。私は、しかし、私はそれが別のページoをナビゲートして、ものを行う必要があり、Webブラウザコントロールを使用していますが、それを表示したくない
ソフトウェアが楽しいです

Chromeでは、空白を消すために<div style = "display:none">を使用する必要がありました。「折りたたみ」は表示オプションではありません。「崩壊」は価値ですが、スペースはまだそこにありました。
Praxiteles

55

可視性:非表示と折りたたみ

コードのみを示し、以下の検討three Labels及び第有するLabel visibilityようにCollapsed

 <StackPanel Orientation="Horizontal" VerticalAlignment="Top" HorizontalAlignment="Center">
    <StackPanel.Resources>
        <Style TargetType="Label">
            <Setter Property="Height" Value="30" />
            <Setter Property="Margin" Value="0"/>
            <Setter Property="BorderBrush" Value="Black"/>
            <Setter Property="BorderThickness" Value="1" />
        </Style>
    </StackPanel.Resources>
    <Label Width="50" Content="First"/>
    <Label Width="50" Content="Second" Visibility="Collapsed"/>
    <Label Width="50" Content="Third"/>
</StackPanel>

折りたたまれた出力:

崩壊

次に、秒Label visibilityをに変更しHidddenます。

<Label Width="50" Content="Second" Visibility="Hidden"/>

非表示の出力:

隠された

それと同じくらい簡単です。


9

少し古いスレッドですが、まだ違いを探している人のために:

Hiddenで取得され、Collapsedで取得されないレイアウト(スペース)を除いて、別の違いがあります。

この「折りたたまれた」メインコントロール内にカスタムコントロールがある場合、次にそれをVisibleに設定すると、すべてのカスタムコントロールが「ロード」されます。ウィンドウの開始時にプリロードされません。

「非表示」に関しては、「ウィンドウ」が開始されたときに非表示に設定したすべてのカスタムコントロール+メインコントロールがロードされます。


2
これは間違いだと思います。すべてのコントロールを折りたたんだ状態に設定しても、現在のアプリケーションはすべてをロードしているようです。
Tim Pohlmann、2016

1
崩壊から来る問題に直面しています。折りたたまれている場合、たとえばInteraction.Behaviorsは、VisibilityがVisibleに変更されるまで読み込まれません。したがって、動作を使用してVMからWPFコントロールにアクセスするある種のプロキシを作成する場合、コントロールが可視(または非表示)に設定されるまで、これは機能しません
user2126375
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.