Visibility.Collapsed와 Visibility.Hidden의 차이점


287

WPF Visibility.Collapsed와 차이점은 무엇입니까 Visibility.Hidden?


4
숨김과 축소 사이에 성능 차이가 있습니까? 객체에 대한 인스턴스가 축소 되었습니까?
Bulli

@Bulli 그렇습니다. 성능 차이가 있습니다. 보이지 않는 컨트롤은 여전히 ​​레이아웃 패스에 종속되지만 축소 된 컨트롤은 레이아웃되지 않습니다. 예를 들어, 큰 격자는 가시성이 보이지 않을 때 성능에 부정적인 영향을 줄 수 있습니다.
Marius Herzog

답변:


426

차이점은 Visibility.Hidden컨트롤 을 숨기지 만 레이아웃에서 차지하는 공간을 확보한다는 것입니다. 따라서 컨트롤 대신 공백을 렌더링합니다. Visibilty.Collapsed컨트롤을 렌더링하지 않습니다 공백을 예약하지 않습니다. 컨트롤이 차지하는 공간은 '축소'되므로 이름입니다.

MSDN의 정확한 텍스트 :

접음 : 요소를 표시하지 않고 레이아웃에 공간을 예약하지 않습니다.

숨김 : 요소를 표시하지 않지만 레이아웃에서 요소를위한 공간을 확보하십시오.

표시 : 요소를 표시합니다.

참조 : http://msdn.microsoft.com/en-us/library/system.windows.visibility.aspx


2
즉, 컨트롤이 축소 된 경우 컨트롤의 너비와 높이가 0으로 설정됩니다.
Sauron

27
레이아웃 측면에서 그렇습니다. 물론 너비와 높이를 0으로 설정하는 것 이상입니다. 가시성이 축소되면 컨트롤에 포커스를 둘 수 없으며 Tab 키 등을 사용하여 컨트롤을 탐색 할 수 없으며 높이와 너비가 0 인 경우에도 여전히 가능합니다. 그러나 다시 한 번 레이아웃 측면에서 말할 수 있습니다.
Razzie

3
WebBrowser 컨트롤과 함께 Hidden (그리고 Visible)을 사용하면 매우 일관성없는 결과를 얻을 수 있습니다. Collapsed (표시된)를 사용하면 더 잘 작동하는 것 같습니다.
Ternary

축소 된 컨트롤은 여전히 ​​"활성"입니다. 내가 다른 페이지 O를 탐색하고 물건을 할 필요 웹 브라우저 컨트롤을 사용하고 있지만, 그러나 나는 그것을 보여주고 싶지 않아
소프트웨어는 재미

Chrome에서는 공백을 사라지게하려면 <div style = "display : none">을 사용해야했습니다. "Collapsed"는 가시성 옵션이 아닙니다. "Collapse"는 값이지만 공간은 여전히 ​​존재합니다.
Praxiteles

55

가시성 : 숨겨진 대 축소

코드 만 보여줍니다 다음 고려 three Labels와 두 번째가 Label visibilityCollapsed:

 <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

조금 오래된 스레드이지만 여전히 차이점을 찾는 사람들을 위해 :

숨김에서 가져온 레이아웃 (공간)을 제외하고는 축소 된 경우에는 다른 차이점이 있습니다.

이 'Collapsed'기본 컨트롤 내에 사용자 지정 컨트롤이있는 경우 다음에이 컨트롤을 Visible로 설정하면 모든 사용자 지정 컨트롤이 "로드"됩니다. 윈도우가 시작될 때 사전로드되지 않습니다.

'숨겨 짐'은 "창"이 시작될 때 숨겨진 것으로 설정 한 모든 사용자 지정 컨트롤 + 기본 컨트롤을로드합니다.


2
이것이 잘못되었다고 확신합니다. 모든 컨트롤을 축소로 설정해도 현재 응용 프로그램이 모든 것을로드하는 것 같습니다.
Tim Pohlmann

1
접기에서 발생하는 문제에 직면하고 있습니다. 접기가 사용 된 경우 (예 : 상호 작용) 가시성이 가시로 변경 될 때까지 행동이로드되지 않습니다. 따라서 VM에서 WPF 제어에 액세스하기 위해 비헤이비어를 사용하여 일종의 프록시를 만드는 경우 제어가 Visible (또는 Hidden)으로 설정 될 때까지 작동하지 않습니다
user2126375
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.