Blocco dell'interfaccia alla chiusura della ChildWindow in Silverlight

di Alessio Leoncini, in Silverlight,

Mi è capitato di imbattermi in uno strano comportamento del controllo ChildWindow tale che, dopo una doverosa ricerca, potrei definirlo un bug.

Lo scenario è l'apertura e la chiusura programmatica di una ChildWindow: può capitare che alla chiusura la ChildWindow scompaia, ma nessun elemento dell'interfaccia sia attivo, e possa quindi ricevere input con buona pace di tutta l'applicazione.

Ecco di cosa sto parlando:

ChildWindow child;
private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
{
    child = new ChildWindow();
    child.Show();

    DispatcherTimer timer = new DispatcherTimer();
    timer.Interval = TimeSpan.FromSeconds(3);
    timer.Tick += new EventHandler((o, ev) => { child.Close(); });
    timer.Start();
}

Una soluzione è quella di forzare la proprietà IsEnabled dell'elemento Root della gerarchia dei controlli:

timer.Tick += new EventHandler((o, ev) =>
{
    child.Close();
    Application.Current.RootVisual.SetValue(Control.IsEnabledProperty, true);
});

In maniera più riutilizzabile potremmo estendere il controllo ChildWindow ed aggiungere il suddetto codice nell'override di OnClosed:

public class MyChildWindow : ChildWindow
{
    protected override void OnClosed(EventArgs e)
    {
        base.OnClosed(e);
        Application.Current.RootVisual.SetValue(Control.IsEnabledProperty, true);
    }
}

Spero sia di aiuto.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese