Laden...

Button MouseDown-Event wird nicht ausgelöst

Erstellt von maxwell86 vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.100 Views
M
maxwell86 Themenstarter:in
32 Beiträge seit 2010
vor 13 Jahren
Button MouseDown-Event wird nicht ausgelöst

Hallo zusammen,

um meine Elemente im Window zu positionieren, habe ich ein Canvas aufgespannt, in das ich zwei Buttons einbaue. Nur leider wird das MouseDown-Ereignis dann nicht ausgelöst. Fängt das Canvas-Element das Event ab? Ich muss aber doch die Elemente im Canvas platzieren, sonst bekomme ich immer die Fehlermeldung "Content mehrfach definiert" oder so!

Danke für eure Hilfe!

3.430 Beiträge seit 2007
vor 13 Jahren

Hallo maxwell86,

wo fängst du das Event ab?
Im Window kannst du das MouseDown schon abfangen, weil das Canvas blockiert das Event nicht.

PS: Ich glaube nicht dass in deinem Fall das Canvas der optimale Container ist. Da man die absolute Positionierung nur selten braucht.
Guck dir mal das Grid / StackPanel usw. an

Gruss
Michael

M
maxwell86 Themenstarter:in
32 Beiträge seit 2010
vor 13 Jahren

Hallo michlG,

danke für Deine Antwort.

<Canvas Height="343" Name="canvas1" Width="440" DataContext="{Binding}">
        <custom:CloseButton Width="8" Height="8" Canvas.Right="10" Canvas.Top="10" MouseDown="CloseButton_MouseDown" Cursor="Hand" />
        <custom:MinimizeButton Width="8" Height="8" Canvas.Right="20" Canvas.Top="10" Cursor="Hand" />
        <custom:Glassy Width="110" Height="40" Canvas.Top="210" Canvas.Left="136" MouseDown="Glassy_MouseDown" />
    </Canvas>

So mache ich das. Habe ein Canvas und darin die drei Buttons. Und bei den zweien habe ich dort das MouseDown-Event. Ist das falsch?

Zu Canvas allgemein: ich habe hier ein Fenster das nicht skaliert werden kann, also immer die gleiche Größe hat. Dann ist die absolute Positionierung eigentlisch schon gut, oder nicht?
Danke für die Hilfe!

3.430 Beiträge seit 2007
vor 13 Jahren

Hallo,

So mache ich das. Habe ein Canvas und darin die drei Buttons. Und bei den zweien habe ich dort das MouseDown-Event. Ist das falsch?

Als falsch würde ich das nicht bezeichnen. Es ist nur nicht komplett richtig 😃

Das Problem ist dass dir der Button das MouseDown-Event frisst (jedenfalls wenn du die linke Maustaste drückst).
Wenn du die rechte verwendest dann funktioniert es.

Das Ganze nennt sich Event Bubbeling oder Tunneling. Guck mal hier: WPF Events Tunneling and Bubbling

Die Lösung des Problems ist einfach das PreviewMouseDown-Event zu verwenden.
Das wird immer ausgelöst.

Zu Canvas allgemein: ich habe hier ein Fenster das nicht skaliert werden kann, also immer die gleiche Größe hat. Dann ist die absolute Positionierung eigentlisch schon gut, oder nicht?

Man ist damit zwar nicht sonderlich flexibel aber wenn das Fenster ohnehin nicht resized werden kann, dann ist das IMHO nicht schlimm 😃

Gruss
Michael

M
maxwell86 Themenstarter:in
32 Beiträge seit 2010
vor 13 Jahren

so einfach die Lösung... 😃 danke!
Aber schon irgendwie verwirrend, warum das jetzt wieder so gehandhabt wird..