Wpf虚拟键盘对话框窃取文本框键盘焦点
问题描述:
我们在我们的项目中使用Mindfusion wpf键盘。Wpf虚拟键盘对话框窃取文本框键盘焦点
每当文本框聚焦时,我们都会打开用户的键盘对话框。
如果没有任何行为的常规文本框一切正常,但是当我们使用此键盘作为“全选”行为的文本框时,我们只能输入一个字符,因为它在键盘上的按键之后选择了文本。
我们检查了它,这与mindfusion键盘没有问题,因为当我们将它用作用户控件时,它可以工作。当我们从他们的应用程序打开这个键盘时,它就可以工作当我们打开Windows键盘时,它就可以工作。
我认为这与对话框窗口大部分是一样的。
我们试图设置它为focusable=false
和showactivated=false
,它不工作。
我们还试图用focusmanger和win32.showunactivated
这里是行为的代码:
public class SelectAllTextOnFocusBehavior : Behavior<TextBox>
{
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.GotKeyboardFocus += AssociatedObjectGotKeyboardFocus;
AssociatedObject.GotMouseCapture += AssociatedObjectGotMouseCapture;
AssociatedObject.PreviewMouseLeftButtonDown += AssociatedObjectPreviewMouseLeftButtonDown;
}
protected override void OnDetaching()
{
base.OnDetaching();
AssociatedObject.GotKeyboardFocus -= AssociatedObjectGotKeyboardFocus;
AssociatedObject.GotMouseCapture -= AssociatedObjectGotMouseCapture;
AssociatedObject.PreviewMouseLeftButtonDown -= AssociatedObjectPreviewMouseLeftButtonDown;
}
private void AssociatedObjectGotKeyboardFocus(object sender,
System.Windows.Input.KeyboardFocusChangedEventArgs e)
{
AssociatedObject.SelectAll();
Console.WriteLine("AssociatedObjectGotKeyboardFocus");
}
private void AssociatedObjectGotMouseCapture(object sender,
System.Windows.Input.MouseEventArgs e)
{
AssociatedObject.SelectAll();
Console.WriteLine("AssociatedObjectGotMouseCapture");
}
private void AssociatedObjectPreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (!AssociatedObject.IsKeyboardFocusWithin)
{
AssociatedObject.Focus();
Console.WriteLine("AssociatedObjectPreviewMouseLeftButtonDown");
e.Handled = true;
}
}
}
你有任何想法如何防止它丢失键盘焦点?
答
的解决方案是在另一个线程要打开的窗口...... 我们为了解决这个问题浪费12小时..
var thread = new Thread(() =>
{
fk = new FullKeyboard();
fk.Show();
App.Current.Dispatcher.ShutdownStarted += Dispatcher_ShutdownStarted;
System.Windows.Threading.Dispatcher.Run();
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();