[英]Wpf Virtual Keyboard dialog steals textbox keyboard focus
我們在項目中使用Mindfusion 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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.