我必须为WPF控件(RadioButton)使用自定义模板,并且该控件必须具有Focused效果的自定义实现。因此,不要使用FocusVisualStyle
属性,而是在控件模板内实现效果,我想使用ControlTemplate的触发器来启用或禁用效果:
<ControlTemplate.Triggers>
<Trigger Property="IsKeyboardFocused" Value="True">
<Setter TargetName="FocusEffect" Property="Visibility" Value="Visible" />
</Trigger>
</ControlTemplate.Triggers>
但问题是,默认的Windows行为是,焦点效果仅在键盘导航模式打开时可见(用户使用Tab键或按Alt键)。如果我只使用IsKeyboardFocused
属性,即使用鼠标单击控件也会有效果,这不应该是这种情况。
我需要使用哪个属性作为触发器来实现默认行为?
2条答案
按热度按时间v1l68za41#
我需要使用哪个属性作为触发器来实现默认行为?
恐怕没有依赖项属性可用于确定最后一次输入是否来自键盘。
是的,
FocusVisualStyle
是作为一个装饰器以编程方式应用于焦点控件之上的。因此,要解决这个问题,需要实现某种焦点检测功能,以编程方式聚焦模板中的元素。
pcrecxhr2#
实际上,你可以自由地为
FocusVisualStyle
设计一个Style,它只是定义了一个要覆盖的控件。RadioButton
标记周围的样式如下所示。您可以根据需要创建替代样式。
八角形:
十字准线: