我在画布上有一个文本框。当我按下回车和/或点击画布时,如何失去焦点(因此插入符号消失)?我的文本框位于按钮的模板中。
我已经尝试了很多东西而且它不起作用:
FocusManager.SetIsFocusScope(mainCanvas, true)
mainCanvas.Focus();
FocusManager.SetFocusedElement(child, parent);
有趣的是,如果我使用一个按钮,它可以与KeyBoard.Focus(按钮)配合使用,但它不适用于画布,是否有人知道为什么或有任何其他建议?
答案 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?
我在博客上发了一篇更完整的帖子。