Differenza tra Visibilità: piegato e Visibilità: nascosto


287

Quali sono le differenze tra Visibility.Collapsede Visibility.Hiddenin WPF?


4
C'è una performance diversa tra Hidden e Collapsed? Esiste un'istanza per l'oggetto che è compresso?
Bulli,

@Bulli Sì, c'è una differenza di prestazioni, un controllo invisibile sarà comunque soggetto al passaggio di layout, mentre un controllo compresso non verrà layout. Quindi, ad esempio, una griglia di grandi dimensioni può influire negativamente sulle prestazioni quando la sua visibilità è invisibile.
Marius Herzog,

Risposte:


426

La differenza è che Visibility.Hiddennasconde il controllo, ma riserva lo spazio che occupa nel layout. Quindi rende gli spazi bianchi invece del controllo. Visibilty.Collapsednon esegue il rendering del controllo e non riserva gli spazi bianchi. Lo spazio che il controllo richiederebbe è "collassato", da cui il nome.

Il testo esatto da MSDN:

Compresso : non visualizzare l'elemento e non riservare spazio per esso nel layout.

Nascosto : non visualizzare l'elemento, ma riserva spazio per l'elemento nel layout.

Visibile : visualizza l'elemento.

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


2
Ciò significa che la larghezza e l'altezza del controllo verranno impostate su zero se fosse crollato.
Sauron,

27
Bene, in termini di layout, sì. Ovviamente, va oltre l'impostazione di larghezza e altezza a zero. Quando la visibilità viene compressa, il controllo non può avere lo stato attivo, non è possibile passare al controllo utilizzando il tasto TAB, eccetera, il che può ancora accadere se avesse un'altezza e una larghezza pari a zero. Ma ancora una volta, in termini di layout, potresti dirlo.
Razzie,

3
Ho scoperto che l'uso di Hidden (e quindi Visible) con il controllo WebBrowser mi dà risultati molto incoerenti. L'uso di Collapsed (quindi Visible) sembra funzionare meglio.
Ternary,

è un controllo compresso ancora "attivo". Sto usando un controllo del browser Web ma non voglio mostrarlo ma ne ho bisogno per navigare in pagine diverse e fare cose
software è divertente

In Chrome, abbiamo dovuto usare <div style = "display: none"> per far scomparire lo spazio bianco. "Collapsed" non è un'opzione di visibilità. "Collapse" è un valore, ma lo spazio era ancora lì.
Prassitele il

55

Visibilità: Hidden Vs Collapsed

Considera il seguente codice che mostra solo three Labelse ha il secondo Label visibilitycome 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>

Uscita compressa:

crollato

Ora cambia il secondo Label visibilityin Hiddden.

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

Uscita nascosta:

Nascosto

Così semplice.


9

Anche se un filo un po 'vecchio, per chi cerca ancora le differenze:

A parte il layout (spazio) preso in Nascosto e non preso in Collapsed, c'è un'altra differenza.

Se all'interno di questo controllo principale "Compresso" sono presenti controlli personalizzati, la prossima volta che lo imposteremo su Visibile, "caricherà" tutti i controlli personalizzati. Non verrà pre-caricato all'avvio di Windows.

Per quanto riguarda 'Nascosto', caricherà tutti i controlli personalizzati + controllo principale che impostiamo come nascosto quando viene avviata la "finestra".


2
Sono abbastanza sicuro che sia sbagliato. La mia attuale applicazione sembra caricare tutto anche se ho impostato tutti i miei controlli su compressi.
Tim Pohlmann,

1
Sto affrontando un problema proveniente da Collapsed. Quando viene compresso viene utilizzato ad esempio Interazione. I comportamenti non vengono caricati fino a quando Visibilità non viene modificata in Visibile. Pertanto, se si crea un qualche tipo di proxy utilizzando comportamenti per accedere al controllo WPF dalla VM, questo non funzionerà fino a quando il controllo non sarà impostato su Visibile (o Nascosto)
user2126375
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.