दृश्यता के बीच का अंतर


287

WPF में Visibility.Collapsedऔर क्या अंतर हैं Visibility.Hidden?


4
क्या हिडन और कोलैप्स के बीच परफॉरमेंस डाइफ़र है? क्या वस्तु के लिए एक उदाहरण है जो ध्वस्त हो गया है?
बुलि

@ बूली हां एक प्रदर्शन अंतर है, एक अदृश्य नियंत्रण अभी भी लेआउटिंग पास के अधीन होगा, जबकि एक ढह गए नियंत्रण को लेआउट नहीं किया जाएगा। उदाहरण के लिए एक बड़ी ग्रिड प्रदर्शन को नकारात्मक रूप से प्रभावित कर सकती है जब उसकी दृश्यता अदृश्य हो।
मारियस हर्ज़ोग

जवाबों:


426

अंतर यह है कि Visibility.Hiddenनियंत्रण को छुपाता है, लेकिन लेआउट में रहने वाले स्थान को आरक्षित करता है। इसलिए यह नियंत्रण के बजाय व्हॉट्सएप को प्रस्तुत करता है। Visibilty.Collapsedनियंत्रण प्रदान नहीं करता है और व्हॉट्सएप आरक्षित नहीं करता है। जिस स्थान पर नियंत्रण होगा वह 'ढह गया' है, इसलिए नाम।

MSDN से सटीक पाठ:

संकुचित : तत्व प्रदर्शित न करें , और लेआउट में इसके लिए स्थान आरक्षित न करें।

छिपी : तत्व प्रदर्शित न करें, लेकिन लेआउट में तत्व के लिए स्थान आरक्षित करें।

दर्शनीय : तत्व प्रदर्शित करें।

देखें: http://msdn.microsoft.com/en-us/library/system.windows.visibility.aspx


2
इसका मतलब है कि अगर यह ढह गया तो नियंत्रण की चौड़ाई और ऊंचाई शून्य पर सेट हो जाएगी।
सौरॉन

27
खैर, लेआउट के संदर्भ में, हाँ। यह निश्चित रूप से चौड़ाई और ऊंचाई को शून्य करने से अधिक है। जब दृश्यता ढह जाती है, तो नियंत्रण पर ध्यान केंद्रित नहीं किया जा सकता है, आप TAB कुंजी, वगैरह का उपयोग करके नियंत्रण में नेविगेट नहीं कर सकते हैं, जिनमें से सभी अभी भी हो सकते हैं यदि इसकी ऊंचाई और चौड़ाई शून्य होगी। लेकिन लेआउट के संदर्भ में, आप फिर से कह सकते हैं।
रज्जी

3
मैंने पाया है कि WebBrowser नियंत्रण के साथ हिडन (और तब दृश्यमान) का उपयोग करना मुझे बहुत असंगत परिणाम देता है। Collapsed (तब Visible) का उपयोग करना बेहतर काम करता है।
टर्निरी

एक ढह गया नियंत्रण अभी भी "सक्रिय" है। मैं एक वेब ब्राउज़र नियंत्रण का उपयोग कर रहा हूं, लेकिन इसे दिखाना नहीं चाहता, हालांकि मुझे ओ विभिन्न पृष्ठों को नेविगेट करने और सामान करने की आवश्यकता है
सॉफ्टवेयर मजेदार है

Chrome में, हमें व्हाट्सएप को गायब करने के लिए <div style = "display: none"> का उपयोग करना था। "Collapsed" एक दृश्यता विकल्प नहीं है। "संक्षिप्त करें" एक मूल्य है, लेकिन अंतरिक्ष अभी भी था।
प्रैक्सिटेल्स

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

भले ही थोड़ा पुराना धागा, उन लोगों के लिए जो अभी भी मतभेदों की तलाश कर रहे हैं:

लेआउट में (स्पेस) के अलावा हिडन में लिया गया है और Collapsed में नहीं लिया गया है, एक और अंतर है।

यदि हमारे पास इस 'Collapsed' मुख्य नियंत्रण के अंदर कस्टम नियंत्रण हैं, तो अगली बार जब हम इसे Visible पर सेट करते हैं, तो यह अन्य कस्टम नियंत्रणों को "लोड" करेगा। विंडो शुरू होने पर यह प्री-लोड नहीं होगा।

'हिडन' के लिए, यह सभी कस्टम नियंत्रण + मुख्य नियंत्रण को लोड करेगा जिसे हम "विंडो" शुरू होने पर छिपे हुए सेट करते हैं।


2
मुझे पूरा यकीन है कि यह गलत है। मेरा वर्तमान अनुप्रयोग सब कुछ लोड करने के लिए लगता है, भले ही मैंने अपने सभी नियंत्रणों को ध्वस्त कर दिया हो।
टिम पोहलमैन

1
मैं Collapsed से आने वाले एक मुद्दे का सामना कर रहा हूं। जब ध्वस्त किया जाता है जैसे इंटरैक्शन का उपयोग किया जाता है। व्यवहार को तब तक लोड नहीं किया जाता है जब तक दृश्यता दृश्यमान में बदल नहीं जाती है। यदि आप VM से WPF नियंत्रण का उपयोग करने के लिए व्यवहार का उपयोग करके किसी प्रकार का प्रॉक्सी बनाते हैं, तो यह तब तक काम नहीं करेगा जब तक कि नियंत्रण दृश्यमान (या छिपा हुआ) पर सेट न हो
user2126375
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.