2012-02-02 24 views
2

我有一些簡單的代碼,用於在我的應用程序窗口的一部分上彈出一個「對話框」式的東西。這個想法是,用戶在繼續處理頁面的這一部分之前必須解除對話。在WPF中禁用頁面內對話框的內容

這是通過將一個大的半透明矩形懸停在應該禁用的頁面部分上 - 它可以很好地阻止點擊到該區域。我想,你在WPF和Web應用程序中看到了很多這類事情。

我遇到的問題是,用戶仍然可以通過使用鍵盤對它們進行切換來達到所有那些多汁的阻塞控制。 「沒問題」,我聽到你說,「只需將面板上的IsEnabled設置爲false,從而阻止鍵盤訪問」。

不幸的是,禁用控制:

  • 不很好看
  • ,往往能夠自定義樣式和綁定意想不到的後果進一步下跌的樹

那麼,有沒有一個更好的方法來禁用頁面的一部分,而不設置「IsEnabled」屬性,以便它不會更改任何控件的可視外觀?

謝謝, 馬克

回答

0

我解決了這個問題,通過訂閱PreviewGotKeyboardFocus事件,從樹中的父元素,然後處理事件,使焦點永遠不會傳遞給孩子。

另外,我當然也必須明確地從「禁用」控件中移除焦點。

0

你能不能把你的 「對話」 XAML在彈出窗口中?然後,調用窗口上的ShowDialog()使其成爲模態窗口?如果你不希望你的彈出窗口看起來像一個標準窗口,你可以隨時調整它來刪除邊框等。

+0

不,彈出窗口需要在頁面內,而不是頂層窗口。 Restyling對話框沒有相同的UI行爲 - 具體而言,我只想禁用「父」窗口的一部分。 – Mark 2012-02-03 15:47:34

相關問題