【问题标题】:Show focused element on loaded control in WPF在 WPF 中加载的控件上显示焦点元素
【发布时间】:2019-07-29 04:47:25
【问题描述】:

加载后如何在视图中突出显示焦点元素?我知道它是集中的,因为如果我按 Enter 或使用键盘导航,它会按预期运行,如果我导航回第一个元素,它会正确突出显示。我只想让用户清楚地知道在加载视图后选择了哪个元素。这发生在按钮或复选框上。

【问题讨论】:

  • 您可以使用样式来设置模板并在其中使用触发器来更改背景。 stackoverflow.com/questions/20949742/…
  • <Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisualStyleBtn}" />有什么不同吗?它在浏览元素时工作正常,但在加载后不适用于焦点元素。

标签: wpf focus highlight


【解决方案1】:

如果控件是焦点元素,则将应用焦点样式。聚焦元素与默认元素不同,默认元素可以在按下回车时允许执行操作。

设置焦点需要明确地完成,在示例中它是通过以下行完成的

FocusManager.FocusedElement="{Binding ElementName=Button}"

这会将焦点设置在按钮上,运行它您应该会看到按钮被突出显示。删除上面的行,按钮将不会突出显示。

<Window x:Class="WpfApp4.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        FocusManager.FocusedElement="{Binding ElementName=Button}"
        mc:Ignorable="d"        
        Title="MainWindow" Height="450" Width="800">
    <StackPanel>
        <Button IsDefault="False"
                Width="150"
                Height="30"
                Name="Button"
                Content="Button"/>
    </StackPanel>
</Window>

【讨论】:

  • 上面的代码并没有解决我的问题,尽管我能够更清楚地了解这个问题。显然,如果我使用键盘与 UI 交互,就会触发想要的行为。示例:我按下按钮上的 Enter 键,然后打开一个新窗口。所述窗口有一个复选框列表,第一个复选框明显突出显示。如果我用 MouseLeft 按相同的按钮,将打开相同的窗口,但复选框上看不到突出显示。我认为 KeyBoardFocus 事件有一些隐藏的行为,有没有办法强制它?
  • 我检查并在按钮上设置了逻辑和键盘焦点,但行为始终不同,具体取决于我如何触发 UserControl 的外观
  • 如果您仍在为此苦苦挣扎,请在问题中添加一个简单示例来说明您正在尝试解决的问题,这将有助于确定问题所在。
【解决方案2】:

哇,我完全忘了问这个问题。最后,我不得不删除在我的样式上设置的 FocusVisualStyle 属性,并在 IsFocused 事件上编写一个简单的触发器。这解决了我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    • 1970-01-01
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多