Blocco dell'interfaccia alla chiusura della ChildWindow in Silverlight

di , 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

Blocco dell'interfaccia alla chiusura della ChildWindow in Silverlight 1010 2
| Condividi su: Twitter, Facebook, LinkedIn, Google+

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