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.
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- Take Me Back e lo sviluppo con Windows Phone 7 in OzoSoftware, il 20 dicembre 2010 alle 09:30
- Attivare l'input da tastiera sulla beta dell'emulatore di Windows Phone 7, il 13 luglio 2010 alle 17:13
- Endpoint con path relativi anche nelle applicazioni Silverlight 4.0, il 3 luglio 2010 alle 19:13
- Inside ModelVirtualCasting #8: Applicazioni Silverlight sul client (OOB) , il 20 giugno 2010 alle 20:03
- Expression Blend e Silverlight a .NET Campus 2010, il 3 febbraio 2010 alle 18:58