Reputation: 206
I have requirement that if user clicks anywhere on slider, it should get the logical focus. It works, if I drag the thumb of the slider. But I am facing an issue when I click on Track(Increase and Decrease repeat button - Red box shown in below image), slider is not getting focus. Please note that I have set IsMoveToPointEnabled to true.
Couple of things that I tried:
Can someone please help me to solve this issue?
<Slider IsMoveToPointEnabled="True"
x:Name="testSlider"
Focusable="True"
Minimum="0"
Maximum="1">
<Slider.Style>
<Style TargetType="Slider">
<Setter Property="Background" Value="Transparent"></Setter>
<Style.Triggers>
<Trigger Property="IsFocused" Value="True">
<Setter Property="Background" Value="Green"></Setter>
</Trigger>
</Style.Triggers>
</Style>
</Slider.Style>
</Slider>
Upvotes: 1
Views: 3052
Reputation: 81348
Just remove IsMoveToPointEnabled="True"
from your slider and posted code works fine.
UPDATE
Setting IsMoveToPointEnabled
to True
eat up the mouse down event since rectangle inside template used it to move to specific point. Hence, it never get tunnel to slider and it doesn't get focus.
However, MouseUp
event is raised properly so what you can do is hook that event and manually put focus on the slider.
XAML
<Slider IsMoveToPointEnabled="True"
x:Name="testSlider"
MouseUp="testSlider_MouseUp"
Focusable="True"
Minimum="0"
Maximum="100">
<Slider.Style>
<Style TargetType="Slider">
<Setter Property="Background" Value="Transparent"></Setter>
<Style.Triggers>
<Trigger Property="IsFocused" Value="True">
<Setter Property="Background" Value="Green"></Setter>
</Trigger>
</Style.Triggers>
</Style>
</Slider.Style>
</Slider>
Code behind
private void testSlider_MouseUp(object sender, MouseButtonEventArgs e)
{
((Slider)sender).Focus();
}
Upvotes: 1