[英]Open popup when textbox has keyboard focus and close via “staysopen = false” property
[英]Keep Popup open and active as long as a TextBox has keyboard focus
我有一個彈出窗口,當TextBox具有鍵盤焦點時,我想一直保持打開狀態並激活其內容。 我已經嘗試過使用此代碼
public partial class MyPopup : Popup
{
public MyPopup
{
InitializeComponent();
EventManager.RegisterClassHandler(
typeof(UIElement),
Keyboard.PreviewGotKeyboardFocusEvent,
(KeyboardFocusChangedEventHandler)OnPreviewGotKeyboardFocus);
}
private void OnPreviewGotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
if (sender is TextBox)
this.IsOpen = true;
else
this.IsOpen = false;
}
}
我在App的構造函數中創建Popup。
此代碼的問題在於,如果使用ShowDialog時已經打開了Popup,則Popup不再處於活動狀態,即使它仍在視覺上位於頂部。
如何解決此問題或以其他方式獲得所需的行為。
找到了一種解決方案,其中我通過檢查窗口是否已加載來檢查窗口是否正在打開。 如果是這樣,我關閉彈出窗口,並在新窗口呈現其內容后再次將其重新打開。
不確定我是否足夠信任使用它,因此將歡迎更好的解決方案。
private void OnGotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
e.Handled = true;
if (sender is TextBox)
{
var _parentWindow = Window.GetWindow((UIElement)sender);
if (!_parentWindow.IsLoaded)
{
this.IsOpen = false;
_parentWindow.ContentRendered += (o, i) => this.IsOpen = true;
}
else
{
this.IsOpen = true;
}
}
else
{
this.IsOpen = false;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.