Domanda

Ho un sacco di controlli sulla mia finestra. Uno di questi è un pulsante di aggiornamento che esegue un'attività ingombrante su un thread in background.

Quando l'utente fa clic sul pulsante di aggiornamento, metto il cursore in uno stato di attesa (clessidra) e disabilito l'intera finestra - Me.IsEnabled = False .

Vorrei supportare l'annullamento dell'azione di aggiornamento consentendo all'utente di fare clic su un pulsante Annulla, ma non posso facilitarlo mentre l'intera finestra è disabilitata.

Esiste un modo per farlo oltre a disabilitare ogni controllo (tranne il pulsante Annulla) uno per uno e quindi riattivarli uno per uno quando l'utente fa clic su Annulla?

È stato utile?

Soluzione

Puoi mettere tutti i controlli in un pannello (Grid, StackPanel, ecc.), e lasciare il pulsante Annulla in un altro pannello. Quindi impostare la proprietà IsEnabled dell'altro pannello.

In pratica, ciò introdurrà probabilmente più di un pannello aggiuntivo.

Ad esempio, se si dispone di uno StackPanel di pulsanti, è possibile aggiungere uno StackPanel aggiuntivo:

<StackPanel Orientation="Horizontal">
    <StackPanel x:Name="controlContainer" Orientation="Horizontal">
        <!-- Other Buttons Here -->
    </StackPanel>
    <Button Content="Cancel" />
</StackPanel>

Quindi, per disabilitare tutto tranne il pulsante Annulla, fare quanto segue:

controlContainer.IsEnabled = false;

Altri suggerimenti

Volevo anche che l'utente potesse annullare lo scaricamento. Ho trovato una soluzione adorabile.

foreach (Control ctrl in this.Controls)
    ctrl.Enabled = false;

CancelButton.Enabled = true;

Ciò consente anche di selezionare e spostare la finestra principale diversamente da this.Enabled = false; che blocca completamente la finestra.

È possibile associare i dati a ciascuna proprietà IsEnabled dei controlli alla proprietà di dipendenza booleana personalizzata che segnala quando l'applicazione è bloccata. Basta non associare il pulsante Annulla.

Come menzionato Donnelle, puoi impostare il multi binding con un convertitore. Ecco alcuni esempi a cui puoi fare riferimento. WPF MultiBinding with Converter Implementazione di esempi multibinding con parametri

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top