Laden...

Mousedown Verhalten von modernen Applikationen

Erstellt von SnowballTwo vor 11 Jahren Letzter Beitrag vor 11 Jahren 519 Views
S
SnowballTwo Themenstarter:in
11 Beiträge seit 2009
vor 11 Jahren
Mousedown Verhalten von modernen Applikationen

Hallo,

zurzeit beobachte ich den Trend, dass mit der linken Maustaste bei einem Control mehrere Events ausgelöst werden können.

  1. Event: kurzer Klick, führt z.B. in ein Untermenü oder schaltet den Togglebutton um

  2. Event: linke Maustaste bleibt gedrückt, nach kurzer Zeit (~0,5 s) tritt das Event ein, wodurch z.B. ein Kontextmenü geöffnet wird.

Zuletzt habe ich dieses Verhalten in der Werkzeugleiste von Expression Blend beobachtet. Daher gehe ich davon aus, dass (insbesondere das 2. Event) in irgendeiner Form in XAML verankert sind. Leider habe ich keine Idee wie ich so etwas ohne Code-Behind mit Timer ect. lösen könnte.

Weiß jemand bescheid? 😃

L
273 Beiträge seit 2006
vor 11 Jahren

Hallo,
nur mit reinem Xaml wirst du da nicht glücklich werden. Ich würd mich an deiner Stelle an das Mousedown - Event hängen. Es spricht ja nix dagegen das im Codebehind zu machen.


DispatcherTimer PopupTimer = new DispatcherTimer();

    PopupTimer.Tick += new EventHandler(PopupTimerTick);
    PopupTimer.Interval = new TimeSpan(0, 0, 0, 0,5);


    private void PopupTimerTick(object sender, EventArgs e)
    {   
        if (Mouse.LeftButton == MouseButtonState.Pressed)
        {
            // If still pressed showing popup
            ((Storyboard)Resources["ShowPopup"]).Begin();
            PopupTimer.Stop();
        }
    }

    private void ImageOnMouseDown(object sender, MouseButtonEventArgs e)
    {
        PopupTimer.Start();
        e.Handled = true;
    }

    private void ImageOnMouseUp(object sender, MouseButtonEventArgs e)
    {
        e.Handled = true;

        if (Popup.IsOpen == false)
        {
            ((Storyboard)Resources["ShowPopup"]).Stop();
            // Here the operation that works on the click
        }
    }