Pergunta

Eu tentei isso XAML:

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

E este C #:

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

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

A variável sliderMouseDown nunca muda porque os eventos MouseLeftButtonDown e MouseLeftButtonUp nunca são levantadas. Como posso obter este código para o trabalho quando um usuário tem o botão esquerdo do mouse em um controle deslizante para ter um conjunto valor booleano para true, e quando o mouse está acima, o bool é definido como falso?

Foi útil?

Solução

Sliders andorinha os eventos MouseDown (semelhante ao botão).

Você pode se inscrever para os eventos PreviewMouseDown e PreviewMouseUp que são demitidos antes do controle deslizante tem a chance de lidar com eles.

Outras dicas

Outra maneira de fazê-lo (e possivelmente melhor dependendo do cenário) é para registrar um manipulador de eventos no código processual como o seguinte:

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

Por favor, note o verdadeiro argumento. É basicamente diz que você deseja receber esse evento, mesmo que tenha sido marcado como manipulado. Infelizmente, ligar um manipulador de eventos como esse só pode ser feito a partir do código processual e não de XAML.

Em outras palavras, com este método, você pode registrar um manipulador de eventos para o evento normal (que bolhas) em vez do evento de visualização que túneis (e, portanto, ocorrer em momentos diferentes).

Veja a barra lateral Mais Fundo Indo na página 70 da WPF desencadeada para mais informações.

Tente usar LostMouseCapture e GotMouseCapture.

    private void sliderr_LostMouseCapture(object sender, MouseEventArgs e)

    private void slider_GotMouseCapture(object sender, MouseEventArgs e)

GotMouseCapture é acionado quando o usuário começa a arrastar o controle deslizante e LostMouseCapture quando ele libera-lo.

Eu gostaria de mencionar que o Slider não chega a engolir todo o evento MouseDown. Ao clicar em uma marcação, você pode ser notificado para o evento. O Slider não vai lidar com eventos MouseDown a menos que eles vêm do controle deslizante ... slider.

Basicamente, se você decidir usar o

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

Versão com os carrapatos ligado, certifique-se de que o evento foi tratado anteriormente. Se você não fizer isso você vai acabar com um caso extremo em que você pensou que o controle deslizante foi clicado, mas foi realmente um carrapato. Registrar para o evento Preview é ainda pior -. Você vai pegar a qualquer evento, mesmo no espaço em branco entre os carrapatos

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top