2010-11-22 3 views
2

J'ai une application WPF où j'ouvre un popup mennu (contrôle contextuel) en utilisant la touche d'échappement. Dans ce menu contextuel, j'ouvre une boîte de dialogue de fichier lorsque j'appuie sur un bouton, et lorsque j'appuie sur le bouton, le menu contextuel est fermé. Quand la prochaine fois j'appuie sur le bouton ESC, il ne s'affiche pas, pas avant d'avoir focalisé un autre programme, par exemple. réinitialiser la mise au point Est-ce que quelqu'un sait ce qui pourrait causer cela?Pourquoi afficher un OpenFileDialog dans WPF bloque mon WPF Popup?

Modifier

//called when pushing esc 
private void ShowSettingsMenu() 
{ 
    SettingsMenu.IsOpen = true; 
} 

//clicking my button, subsequent presses on my esc, doesnt pop it up (the code is run) 
private void ImportLicenseButton_Click(object sender, RoutedEventArgs e) 
{ 
    SettingsMenu.IsOpen = false; //<- hiding it again 

    OpenFileDialog filedialog = new OpenFileDialog(); 
    filedialog.Filter = "Xml Files|*.xml"; 
    if ((bool)filedialog.ShowDialog()) 
    { 
     string fileName = "license.xml"; 
     string destinationFolder = new FileInfo(Assembly.GetExecutingAssembly().Location).Directory.FullName; 
     if (!string.IsNullOrEmpty(filedialog.FileName)) 
     { 
     File.Copy(filedialog.FileName, System.IO.Path.Combine(destinationFolder, fileName), true); 
     } 
     else 
     { 
     MessageBox.Show("Please select a file name"); 
     } 
    } 
    this.Cursor = Cursors.None; 
} 
+0

Code aiderait à diagnostiquer ... –

+0

est le code de gestionnaire de clé également ajouté au popup lui-même? Si ce n'est pas le cas, le popup peut encore avoir le focus (mais être caché) quand la boîte de dialogue ouvrira le fichier, empêchant le coup de clé de s'inscrire dans la fenêtre. Les fenêtres contextuelles sont affichées dans des fenêtres séparées de leur contrôle parent, de sorte que les événements ne peuvent pas être routés de la même manière. Essayez de définir la propriété Parent de la fenêtre contextuelle si elle n'est pas définie automatiquement. – Guy

+0

L'une des choses clés que vous faites ci-dessus est de cacher le popup avant d'afficher le dialogue. Attrape toujours les personnes en supposant que le dialogue aura l'index z le plus élevé sur l'affichage. –

Répondre

1

fixe par réafficher le menu contextuel.