| 

.NET C# Java Javascript Exception

2
Hallo zusammen,
ich zerbreche mit derzeit über folgendes Problem den Kopf:
Ich habe ein Popup Control in dem sich ein DataGrid befindet.
Hinter dem Popup befindet sich ein Items Control auf dessen Items man drauf klicken kann und dann eine weitere Aktion ausgelöst wird.

Wenn ich nun bei offenem Popup auf eine Datenzeile im Popup Doppel klicke, wird per CodeBehind etwas Datenverarbeitung ausgeführt und dann das Popup geschlossen (reagiere hier auf das MouseDoubleClick Ereigniss des Grids). Das Problem dabei ist, das der Klick dann immer noch an das Items Control darunter weiter geleitet wird und nicht vom Popup *abgefangen* wird.

Ich verstehe allerdings nicht warum überhaupt das Click Ereignis an das hinter dem Popup liegende Control überhaupt weitergereicht wird. Es hat den Anschein, dass ich das Popup zu früh wieder schließe, allerdings kann ich dies ja auch nur dann schließen wenn der Benutzer auf eine Datenzeile doppelt geklickt hat.

Vielen Dank für Eure Hilfe
Chris
News:
23.08.2011
ChrisDotNet 21 2
3 Antworten
2
Hast du schon PreviewMouseDoubleClick getestet?
Although this routed event seems to follow a tunneling route through an element tree, it actually is a direct routed event that is raised along the element tree by each UIElement. If you set the Handled property to true in a PreviewMouseDoubleClick event handler, subsequent PreviewMouseDoubleClick events along the route will occur with Handled set to false, but the MouseDoubleClick event will occur with Handled set to true. This is a higher-level event for control consumers who want to be notified when the user double-clicks the control and to handle the event in an application.

Control authors who want to handle mouse double clicks should use the PreviewMouseLeftButtonDown event when ClickCount is equal to two. This will cause the state of Handled to propagate appropriately in the case where another element in the element tree handles the event.
23.08.2011
Jürgen Luhr 7,1k 2 9
Hallo Jürgen, danke für deine Hilfe. Die Idee war wirklich gut doch leider hat es nicht geholfen. Ich hatte meinen Code im Preview ausgeführt, aber leider *klickt* es immer noch auf dem drunter liegendem ItemsControl. Auch ein e.Handled = true nach ausführung des Preview oder des "normalen" DoubleClick hat nichts gebracht :(
ChrisDotNet 23.08.2011
0
Versuche mal
handled=true;

Das sollte verhindern, dass das event weitergereicht wird.
23.08.2011
mrmee 745 1 8
mrmee 745 1 8
sry, hatte den kommentar von oben nicht ganz gelesen.
mrmee 24.08.2011
0
Hallo,

es handelt sich um bubbeling bzw tunneling von events. Beim bubbling werden die Events vom untersten Control weiter nach oben gereicht, beim tunneling vom obersten bis ganz nach unten.

Wie mein Vorredner bereits sagte, kannst du im Event-Handler deines Ereignisses die Eigenschaft e.handled = true setzten um zu verhindern, dass das event weitergereicht wird. Bedenke dabei, das es nicht unbedingt das selbe Control sein muss was du eigentlich anklickst, du kannst die E.handled Eigenschaft auch weiter oben in der Control-Hierarchie auf true setzen.

Grüße
24.08.2011
Nicolai Schönberg 2,4k 2 9

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH