Infoleiste einblenden wenn Maus am Bildschirmrand ist

  • WPF
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von eichseinet.

    Infoleiste einblenden wenn Maus am Bildschirmrand ist

    Hallo Leute.

    Mein Programm enthält ein Stackpanel, das wie eine ausgeblendete Taskleiste am unteren Rand des Fensters (Vollbild) erscheinen soll, wenn der Mauszeiger am unteren Bildschirmrand ist.
    Erster Gedanke; MouseOver verwenden und ein Storybord erstellen, um die Position langsam ins Bild zu schieben. Wenn das Stackpanel aber doch aus dem sichtbaren Bereich geschoben ist, dann bekommt man doch auch kein MouseOver mehr.
    Meine Suche im Internet war erfolglos, weil ich wohl auch keine guten Suchbegriffe hatte. Weiss nicht so recht wie man das richtig beschreiben soll.
    Wie blendet man also ein Control oder wenns besser klappt ein UserControl ein, wenn die Maus am unteren Bildschirmrand ist?

    Gruß
    eichseinet
    Die Grundidee ist gut, hab ich auch ganz kurz überlegt. Leider befinden sich auch Buttons und eine Combobox im Bereich. Die lassen sich mit einem überlegten Canvas z.B. nicht mehr bedienen. Aktuell versuche ich es mit dem Leave des Stackpanels. Leider feuert das nicht, wenn die Maus z.B. über einem Button ist und dann das Panel verlässt. Obwohl... wenn das Panel einfach höher ist als der Inhalt, dann müsste es klappen.

    Nachtrag: Es funktioniert jetzt.
    Das Stackpanel und alle Elemente wurden jetzt in ein eigenes UserControl (UC) übertragen und das anstelle des Stackpanels eingefügt. Das UC ist höher als der Inhalt. Somit verlasse ich immer das UC zuletzt und die Events feuern.

    XML-Quellcode

    1. <local:Taskleiste_UC x:Name="TL_UC" Height="{Binding UserControl_Mouseover_Hoehe}" VerticalAlignment="Bottom" Background="Transparent"/>


    Dann wurden die Events "MouseEnter" zum Einblenden und "MouseLeave" zum Ausblenden aboniert.

    VB.NET-Quellcode

    1. AddHandler UC_H.TL_UC.MouseEnter, AddressOf DC.Capture_UC_TL 'UserControl für Taskleiste
    2. AddHandler UC_H.TL_UC.MouseLeave, AddressOf DC.Capture_lost_UC_TL 'UserControl für Taskleiste


    und die Methoden dazu: (Taskleistenhoehe ist dannauf das Stackpanel im UC gebunden)

    VB.NET-Quellcode

    1. Public Sub Capture_UC_TL(sender As Object, e As MouseEventArgs)
    2. Taskleiste_Hoehe = 45
    3. End Sub
    4. Public Sub Capture_lost_UC_TL(sender As Object, e As MouseEventArgs)
    5. Taskleiste_Hoehe = 0
    6. End Sub

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „eichseinet“ ()

    MouseMove ist ein RoutedEvent, d.h., du kannst es im gesamten VisualTree empfangen - z.B. auch einfach im MainForm. Da musste nur in rechter Weise bestimmen, welches Rechteck du überwacht haben möchtest.
    Wahrscheinlich entsteht auch eine MouseMove-Ereigniskette, wenn dein UC sich unter die Maus schiebt.

    MouseEnter/Exit kenne ich als unzuverlässig, wenn die Maus sehr schnell bewegt wird - probier ma aus.