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
