Frage

Ich habe versucht, diese XAML:

<Slider Width="250" Height="25" Minimum="0" Maximum="1" MouseLeftButtonDown="slider_MouseLeftButtonDown" MouseLeftButtonUp="slider_MouseLeftButtonUp" />

Und das C #:

private void slider_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
sliderMouseDown = true;
}

private void slider_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
sliderMouseDown = false;
}

Die sliderMouseDown Variable ändert sich nie, weil die Mouseleftbuttondown und MouseLeftButtonUp Ereignisse nie ausgelöst werden. Wie kann ich diesen Code zu arbeiten, wenn ein Benutzer mit der linken Maustaste auf einem Schieber einen Bool Wert auf true gesetzt haben muss, und wenn die Maus nach oben, wird der Boolesche auf false gesetzt?

War es hilfreich?

Lösung

Sliders schlucken MouseDown- Events (ähnlich der Taste).

Sie können die Preview und PreviewMouseUp Ereignisse registrieren Sie sich für die gefeuert werden, bevor der Schieber eine Chance, sie zu behandeln hat.

Andere Tipps

Eine andere Möglichkeit, es (und möglicherweise besser je nach Szenario) zu tun ist, um einen Ereignishandler in prozeduralen Code wie folgt registrieren:

this.AddHandler
(
    Slider.MouseLeftButtonDownEvent,
    new MouseButtonEventHandler(slider_MouseLeftButtonDown),
    true
);

Bitte beachten Sie das wahre Argument. Es sagt im Grunde, dass Sie dieses Ereignis erhalten möchten, auch wenn es als erledigt markiert wurde. Leider kann ein Event-Handler wie dieses Einhaken nur aus prozeduralen Code durchgeführt werden und nicht von XAML.

Mit anderen Worten, mit dieser Methode können Sie einen Ereignishandler für das normale Ereignis registrieren (die Blasen) anstelle der Preview-Veranstaltung, die Tunnel (und damit zu unterschiedlichen Zeiten auftreten).

Sehen Sie die Graben Tiefer Kasten auf Seite 70 von WPF Unleashed für weitere Informationen.

Versuchen Sie Lost und GotMouseCapture verwenden.

    private void sliderr_LostMouseCapture(object sender, MouseEventArgs e)

    private void slider_GotMouseCapture(object sender, MouseEventArgs e)

GotMouseCapture wird ausgelöst, wenn der Benutzer beginnt, den Schieber ziehen, und Lost, als er gibt sie.

Ich möchte erwähnen, dass der Slider die gesamte MouseDown- Ereignis nicht ganz schlucken. Mit einem Klick auf einem Häkchen, Sie können für den Fall, Benachrichtigungen erhalten. Der Slider wird nicht MouseDown- Ereignisse behandeln, sofern sie nicht vom Schieber des ... Schieber kommen.

Grundsätzlich, wenn Sie sich entscheiden, die

AddHandler(Slider.MouseLeftButtonDownEvent, ..., true)

Version mit den gedrehten Zecken auf, achten Sie darauf, dass das Ereignis zuvor behandelt wurde. Wenn Sie dies nicht tun werden Sie mit einem Rand Fall am Ende, wo Sie den Schieber dachte geklickt wurde, aber es war wirklich ein Tick. Die Anmeldung für die Preview Event ist noch schlimmer -. Sie das Ereignis überall abholen werden, auch auf dem weißen Raum zwischen Ticks

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top