我要求如果用户点击滑块上的任何位置,它应该获得逻辑焦点。如果我拖动滑块的拇指,它的工作原理。但是当我点击Track(增加和减少重复按钮 - 下图中显示的红色框)时,我遇到了一个问题,滑块没有获得焦点。请注意,我已将IsMoveToPointEnabled设置为true。
我尝试了很多事情:
有人可以帮我解决这个问题吗?
<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>
答案 0 :(得分:1)
只需从滑块中删除 IsMoveToPointEnabled="True"
,发布的代码就可以正常使用。
<强>更新强>
将IsMoveToPointEnabled
设置为True
会占用鼠标按下事件,因为模板内的矩形用于移动到特定点。因此,它永远不会到滑块隧道,它不会得到焦点。
但是, MouseUp
事件已正确引发,因此您可以执行的操作是挂钩该事件并手动将焦点放在滑块上。
<强> 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>
代码
private void testSlider_MouseUp(object sender, MouseButtonEventArgs e)
{
((Slider)sender).Focus();
}