按下或单击输入时,忽略对文本框的关注

时间:2011-08-24 01:13:16

标签: wpf textbox focus

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

我已经尝试了很多东西而且它不起作用:

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

有趣的是,如果我使用一个按钮,它可以与KeyBoard.Focus(按钮)配合使用,但它不适用于画布,是否有人知道为什么或有任何其他建议?

1 个答案:

答案 0 :(得分:2)

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?

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