2013-02-22 6 views
5

Ich zeige eine Popup als Reaktion auf einen Klick auf die Schaltfläche (popup.IsOpen = true;). Das Popup enthält eine ComboBox, und wenn ich auf ein Element in der Combobox klicke, wird das Popup unter anderem durch das SelectionChanged-Ereignis ausgeblendet.Seltsames Problem - Mausklick im Popup wird von Steuerelement darunter erfasst

Das Popup erscheint über eine DataGrid, die ich auch auf meiner Seite habe, und ich finde, dass der Mausklick auf die Combobox auch von einem MouseUp-Ereignis übernommen wird, das ich auf dem DataGrid habe. Irgendeine Idee was ist los?

Antwort

2

Das Ereignis MouseUp hat eine Routing-Strategie vom Typ Bubbling. Ereignisse, die diesen Strategietyp verwenden, werden an die übergeordneten Steuerelemente übergeben. Da die Popup ein Kind der DataGrid ist, wird das Ereignis bis zur DataGrid "Blase". Wenn Sie möchten, dass das Ereignis nicht bläst, können Sie versuchen, PreviewMouseUp zu verwenden, das über eine Tunneling Routing-Strategie verfügt und die Kette zu unterordneten Steuerelementen "durchtunneln" wird. Hier ist ein anständiger overview von Routing Strategies.

+0

Ich habe sowohl MouseUp und PreviewMouseUp auf dem DataGrid versucht, aber ohne Erfolg. Seltsamerweise enthält das Popup auch einen Button und ich bekomme damit kein Problem - nur beim Anklicken der Combobox. –

+0

@AndrewStephens: Hm, das ist komisch ... Ich habe ein bisschen experimentiert und mein DataGrid MouseUp wurde nicht auf den ComboBox-Klick gefeuert ... das PreviewMouseUp-Event feuert zwar (ich hätte gedacht, dass es das andere wäre Weg drum herum). Ich habe auch das Popup ausgeblendet, als ein Gegenstand ausgewählt wurde. Also kann ich das Problem nicht neu erstellen ... Interesse daran, etwas Code zu posten? – Mash