【问题标题】:Lose focus on textbox when enter is pressed or clicked away按下或单击输入时失去对文本框的关注
【发布时间】:2011-08-30 09:01:34
【问题描述】:

我在画布上有一个文本框。当我按回车键和/或单击画布时,如何失去焦点(因此插入符号消失)?我的文本框位于按钮模板中。

我已经尝试了几乎所有方法,但它不起作用:

FocusManager.SetIsFocusScope(mainCanvas, true)
mainCanvas.Focus();
FocusManager.SetFocusedElement(child, parent);

有趣的是,如果我使用一个按钮,它可以与 KeyBoard.Focus(button) 一起使用,但它不适用于画布,有人知道原因或有其他建议吗?

【问题讨论】:

    标签: wpf textbox focus


    【解决方案1】:

    Canvas 的问题是当你点击它时,除非你的背景不是白色的,否则你实际上并没有触发点击事件。

    如果你想要白色,一个技巧是使用白色 -1 或#FFFFFE,或者如果父级也是白色,则使用透明。所以没有人能说它不是白色的。

    现在您的点击事件可以发生了。

    您还需要使其具有焦点。

    MainWindow.xaml

    <Window x:Class="TextBoxInCanvas.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid Name="MainGrid">
        <Canvas Name="canvas1" Focusable="True" Background="#FFFFFE" MouseDown="canvas1_MouseDown">
            <TextBox Height="23" Name="textBox1" Width="120" IsEnabled="True" 
                     Canvas.Left="81" Canvas.Top="115" PreviewKeyDown="textBox1_PreviewKeyDown"/>
        </Canvas>
    </Grid>
    

    MainWindow.xaml.cs

    using System.Windows;
    using System.Windows.Input;
    
    namespace TextBoxInCanvas
    {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
    
            private void canvas1_MouseDown(object sender, MouseButtonEventArgs e)
            {            
                Keyboard.Focus(canvas1);
            }
    
    
             private void textBox1_PreviewKeyDown(object sender, KeyEventArgs e)
             {
                 if (Key.Enter == e.Key)
                     Keyboard.Focus(canvas1);
             }
        }
    }
    

    How to make the WPF Canvas mouse click event work?

    我在我的博客上写了一篇更完整的帖子。

    【讨论】:

    • 将背景设置为除 null 之外的任何内容都可以(包括白色)。这和 Focusable 将解决问题。
    • @Meleak 它起作用了,但是我可以看到当元素获得焦点时出现的虚线边框上的边框,我不知道如何摆脱它,所以我把重点放在当前窗口。
    • @mihajlv:要摆脱焦点视觉,您可以在Canvas 上设置FocusVisualStyle="{x:Null}"
    猜你喜欢
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    • 2013-02-26
    • 2019-10-15
    相关资源
    最近更新 更多