Sự khác biệt giữa Visibility.Collapsed và Visibility.Hidden


287

Sự khác biệt giữa Visibility.CollapsedVisibility.Hiddentrong WPF là gì?


4
Có một hiệu suất chết giữa Hidden và Collapsed? Có một ví dụ cho các đối tượng đã bị sụp đổ?
Bulli

@Bulli Có một sự khác biệt về hiệu suất, một điều khiển vô hình sẽ vẫn phải tuân theo thông qua bố cục, trong khi điều khiển bị thu gọn sẽ không được bố trí. Vì vậy, ví dụ, một lưới lớn có thể ảnh hưởng tiêu cực đến hiệu suất khi Tầm nhìn của nó là Vô hình.
Marius Herzog

Câu trả lời:


426

Sự khác biệt là Visibility.Hiddenche giấu sự kiểm soát, nhưng dành không gian mà nó chiếm giữ trong bố cục. Vì vậy, nó làm cho khoảng trắng thay vì điều khiển. Visibilty.Collapsedkhông đưa ra điều khiển không dành khoảng trắng. Không gian mà điều khiển sẽ chiếm là 'sụp đổ', do đó có tên.

Văn bản chính xác từ MSDN:

Sụp đổ : Không hiển thị phần tử và không dành chỗ cho phần tử trong bố cục.

Ẩn : Không hiển thị phần tử, nhưng dành không gian cho phần tử trong bố cục.

Hiển thị : Hiển thị phần tử.

Xem: http://msdn.microsoft.com/en-us/l Library / system.windows.visibility.aspx


2
Điều đó có nghĩa là chiều rộng và chiều cao của điều khiển sẽ được đặt thành 0 nếu nó bị sập.
Sauron

27
Vâng, về mặt bố trí, vâng. Tất nhiên nó không chỉ là thiết lập chiều rộng và chiều cao bằng không. Khi Tầm nhìn bị thu gọn, điều khiển không thể lấy nét, bạn không thể điều hướng đến điều khiển bằng phím TAB, vân vân, tất cả vẫn có thể nếu nó có chiều cao và chiều rộng bằng không. Nhưng một lần nữa, về mặt bố trí, bạn có thể nói rằng.
Razzie

3
Tôi đã thấy rằng việc sử dụng Ẩn (và sau đó Hiển thị) với điều khiển WebBrowser mang lại cho tôi kết quả rất không nhất quán. Sử dụng Collapsed (sau đó có thể nhìn thấy) dường như hoạt động tốt hơn.
Ternary

là một điều khiển sụp đổ vẫn "hoạt động". Tôi đang sử dụng điều khiển trình duyệt web nhưng không muốn hiển thị tuy nhiên tôi cần nó để điều hướng o các trang khác nhau và thực hiện công cụ
phần mềm rất thú vị vào

Trong Chrome, chúng tôi đã phải sử dụng <div style = "display: none"> để làm cho khoảng trắng biến mất. "Sụp đổ" không phải là một tùy chọn hiển thị. "Thu gọn" là một giá trị, nhưng không gian vẫn còn đó.
Praxlistes

55

Tầm nhìn: Ẩn Vs Sụp đổ

Xem xét mã sau chỉ hiển thị three Labelsvà có thứ hai 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>

Đầu ra bị sập:

Sụp đổ

Bây giờ thay đổi thứ hai Label visibilitythành Hiddden.

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

Đầu ra ẩn:

Ẩn

Đơn giản vậy thôi.


9

Mặc dù một chủ đề hơi cũ, cho những người vẫn đang tìm kiếm sự khác biệt:

Ngoài bố cục (không gian) được chụp trong Ẩn và không được chụp trong Thu gọn, còn có một sự khác biệt khác.

Nếu chúng tôi có các điều khiển tùy chỉnh bên trong điều khiển chính 'Thu gọn' này, lần tiếp theo chúng tôi đặt nó thành Hiển thị, nó sẽ "tải" tất cả các điều khiển tùy chỉnh. Nó sẽ không tải trước khi cửa sổ được bắt đầu.

Đối với 'Ẩn', nó sẽ tải tất cả các điều khiển tùy chỉnh + điều khiển chính mà chúng tôi đặt là ẩn khi "cửa sổ" được khởi động.


2
Tôi khá chắc chắn rằng điều này là sai. Ứng dụng hiện tại của tôi dường như tải mọi thứ ngay cả khi tôi đặt tất cả Điều khiển của mình bị sập.
Tim Pohlmann

1
Tôi đang đối mặt với một vấn đề đến từ Collapsed. Khi thu gọn được sử dụng, ví dụ như Tương tác. Các biểu đồ không được tải cho đến khi Hiển thị được thay đổi thành Hiển thị. Do đó, nếu bạn tạo một số loại proxy sử dụng các hành vi để truy cập điều khiển WPF từ VM, thì điều này sẽ không hoạt động cho đến khi điều khiển được đặt thành Hiển thị (hoặc Ẩn)
user2126375
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.