簡體   English   中英

只要TextBox具有鍵盤焦點,就保持彈出窗口處於打開狀態並處於活動狀態

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM