WPF -如何防止键盘焦点转移到鼠标单击的用户控件

nszi6y05  于 2023-10-22  发布在  其他
关注(0)|答案(2)|浏览(151)

我有一个从System.Windows.Controls.Primitives.ToggleButton继承的MyToggleButton用户控件。
如果键盘焦点在另一个控件上,并且我用鼠标左键单击MyToggleButton,则键盘焦点将转移到MyToggleButton控件。
如果鼠标左键单击MyToggleButton,是否有方法可以防止键盘焦点转移?

注意:用户必须仍然能够Tab到MyToggleButton控件,这将设置键盘焦点。我只是不希望用户能够通过鼠标左键单击来设置键盘焦点。

同样,控件需要通过鼠标左键单击。我不希望控件在单击后具有键盘焦点。

62o28rlo

62o28rlo1#

ToggleButtonFocusable属性设置为false。

Focusable="False"
e4yzc0pl

e4yzc0pl2#

通过将HitTestVisible设置为false或使用PreviewMouseLeftButtonDown事件并将其标记为已处理,可以使控件对鼠标输入不敏感。这两种方式都有副作用,即对照组的小鼠相互作用部分或完全受到抑制。使用事件处理程序,您仍然可以进行右键单击。键盘导航和输入,但不受影响,仍然功能。
下面是一个例子,它是如何与文本框。你可以用TAB键浏览所有4个文本框,但是你不能用鼠标左键选择第二个和第三个,但是第三个对鼠标右键点击有React。聚焦的文本框总是显示在浅红色背景中,用于演示目的。

<Window x:Class="WpfAppDummy1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="450" Width="800">
    <StackPanel>
        <StackPanel.Resources>
            <Style TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}">
                <Setter Property="Background" Value="#FEFE"/>
                <Style.Triggers>
                    <Trigger Property="IsFocused" Value="True">
                        <Setter Property="Background" Value="#FF88" />
                        <Setter Property="Foreground" Value="#FFF8" />
                    </Trigger>
                </Style.Triggers>
            </Style>
        </StackPanel.Resources>
        <TextBox>Hi</TextBox>
        <TextBox IsHitTestVisible="False">Hello</TextBox>
        <TextBox PreviewMouseLeftButtonDown="OnPreviewMouseLeftButtonDown">Howdy</TextBox>
        <TextBox>Hey Ho</TextBox>
    </StackPanel>

这就是eventhandler(存根):

// C# code behind 
 private void OnPreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { e.Handled = true; }

相关问题