Wykrywanie kliknięcia poza kontrolką WPF - slider

0

Chciałbym żeby slider aktywował się kliknięciem i pozostał aktywny do momentu kliknięcia w innym miejscu niż slider. W jaki sposób najlepiej wykryć kliknięcie poza sliderem? Próbowałem Mouse.PreviewMouseDownOutsideCapturedElementEvent ale wtedy wymuszam CaptureMouse na sliderze i nie mogę przesuwać slidera. Także kliknięcia na sliderze powodują wywołanie eventu.

Slider zawarty jest w ContentControl żeby można było wykryć kliknięcie myszy gdy slider jest nieaktywny.

Jest jakiś lepszy sposób na wykrycie kliknięcia poza sliderem?

XAML:

  <ContentControl Grid.Row="1" Width="400" Height="20" MouseLeftButtonDown="ContentControl_MouseLeftButtonDown">
            <Slider x:Name="sliderTest" PreviewMouseLeftButtonDown="sliderTest_PreviewMouseLeftButtonDown"            
              IsMoveToPointEnabled="True" Grid.Row="1" Width="400" Height="20"/> 
   </ContentControl>

C#



        private void ContentControl_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            sliderTest.IsEnabled = true;
        }
        private void sliderTest_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            if (!sliderTest.IsMouseCaptured)
                sliderTest.CaptureMouse();
          AddHandler();
        }
        private void AddHandler()
        {
            AddHandler(Mouse.PreviewMouseDownOutsideCapturedElementEvent, new MouseButtonEventHandler(HandleClickOutsideOfControl), true);
        }
        private void HandleClickOutsideOfControl(object sender, MouseButtonEventArgs e)
        {
            sliderTest.ReleaseMouseCapture();  
            sliderTest.IsEnabled = false;
        }
0

Ok, znalazłem sposób. Nie do końca o to mi chodziło ale działa tak jak powinno. Wrzucam tutaj jakby ktoś miał podobny problem.
Kliknięcie poza slider powoduje wywołanie eventu z głównego okna, sprawdzam czy kliknięcie nie było na sliderze, jeżeli nie to wyłączam slider.

private void Window_PreviewMouseDown(object sender, MouseButtonEventArgs e)
        {
       
            if (sliderTest.IsEnabled)
            {
                if (!(e.Source is Slider s && s.Name == "sliderTest"))
                {
                    sliderTest.IsEnabled = false;         
                }               
            }

```

1 użytkowników online, w tym zalogowanych: 0, gości: 1