2010-06-26 73 views
0

我遇到了我不明白的情況,希望有人給我啓發,如果可能的話。WPF模態窗口行爲怪異

創建一個WPF應用程序。爲了簡單起見,將此應用程序視爲一個窗口。我在這個窗口上放了一些控件,其中還有一個TextBox控件(我們稱它爲TB)。

有一個要求,這個結核病患者必須始終有重點(以防某人通過條形碼掃描儀輸入某物或某物時應該出現)。

我想在一個定時器的幫助下實現這一點:每秒都將焦點轉移到結核病。

直到現在一切正常(如預期)。

奇怪的是以下內容:假設一個新用戶想要使用這個窗口,所以她必須登錄。我想用一個新的Window對象(我們稱之爲W2)來實現它,這樣調用它:

W2.ShowDialog(); 

這個W2窗口應該是模態的(記住定時器仍然執行)。

瘋狂的事情是,在Windows Vista中這個工程完美預期(這意味着W2是有模式的,用戶可以到她是否應該W2做什麼),在Windows XP 儘快用戶想要在W2的文本框中輸入內容,焦點在初始窗口上重新設置爲TB(據我所能解釋:這意味着W2是而不是模式!!!?我是對嗎?)。

我該如何克服這種情況?

這是正確的做法嗎?

在此先感謝

回答

4

確保W2的Owner property設置爲您的主窗口。

從引用文檔:

當通過調用的ShowDialog打開一個子窗口,你還應該設置子窗口的所有者屬性。

+0

說實話:我沒有設置這個。我想你是正確的!這一定是缺失的部分。但另一方面:爲什麼它在Windows Vista上工作? – 2010-06-27 19:25:48

+0

@Sawas:出於某種原因,這在XP中似乎沒有完全相同 - 在Vista/7中,沒有設置這通常不會導致問題(儘管在技術上它應該在那裏設置) – 2010-06-28 16:17:59

1

我不確定這個設置的重點 - 每隔幾秒就是一個好主意。總是有可能某些輸入會出現在失去焦點狀態和獲得焦點狀態之間的間隔中(並且會丟失)。另一種解決方案是捕捉TB所駐留形式的PreviewKeydown事件,並以某種方式將條形掃描器的輸出設置爲TB。

+0

謝謝非常適合指向我這個方向。我必須仔細研究如何使用這種技術來實現。來自我的+1!非常感謝 – 2010-06-28 13:44:12