Blocco dell'interfaccia alla chiusura della ChildWindow 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.











