2013-01-18 81 views
0

我想在XAML Metro App中模擬模態對話框。如何在XAML Metro應用程序中禁用網格(面板)?

所以我打算在所有的控件上設置.IsEnabled = false,除了將作爲模態對話框構成的控件之外。

顯然,IsEnabled不在Grid中,不在Panel中不在FrameworkElement中。 如何禁用它不使用戶控制出來?

我想辛諾夫斯基削減了這麼多的角落,整個事情現在更像是一個埃舍爾樓梯。我放棄了我的信仰。請幫忙

回答

2

對不起,我有點遲到了......

這是我如何創建一個模式彈出 - 我用一個彈出式對話框,在頂部和底部是透明的,因此,它的背後都會顯示在通過。當彈出窗口打開時,我將其大小設置爲覆蓋整個屏幕。

彈出窗口的頂部和底部也設置爲autosize(height = *),以便填充屏幕的整個頂部和底部。這可以防止任何輸入進入下面的網格。

這裏是我的彈出窗口在Visual Studio中的屏幕截圖: enter image description here

彈出是5行,3對話框本身和2的透明頂部和底部的網格。

下面是彈出窗口在我的應用程序中的外觀。很顯然,網格通過透明的頂部和底部顯示。由於彈出窗口填充整個屏幕,所以任何輸入(鍵盤或鼠標)都會進入它,而不是下面的網格,從而使彈出窗口像模態對話框一樣。

Popup with grid underneath

被警告,雖然,透過這個策略,你必須處理這些事件:

  • 屏幕尺寸調整(全屏,啪,看到裏面視圖) - 你需要調整彈出窗口適合每個視圖狀態
  • 屏幕旋轉 - 再次,您必須在此處處調整大小
  • 鍵盤彈出 - 您需要將彈出窗口向上移動,以便屏幕鍵盤不會干擾它。
2

設置爲IsHitTestVisible = false的背景內容。

此外,您可以將焦點設置爲模態層根目錄中的某些內容,並在模態層根上將TabNavigation設置爲Cycle,以確保用戶無法將製表符切換/移出標籤。還要確保模態圖層全部都是命中測試 - 例如Transparent或有一些其他填充,以便用戶無法點擊它。

同時確保沒有Popups顯示,而你的模態層是可見的。

+0

我有這個想法,但在可見性而不是解決。你確定這有效嗎?你不能從鍵盤輸入文本框? –

+0

不,他是對的,'IsHitTestVisible'完全禁用。 –

+1

**這是錯誤的答案**。你仍然可以使用鍵盤 - 而這正是我想要避免的。 –

0

不幸的是,似乎沒有人知道(除Skakun先生誰給了錯誤的答案,從來沒有打擾修改它)。

因此,我的解決方案(最簡單的)是使問題中的元素隱藏 - 我找不到任何其他方式來'禁用'網格。

如果我想正確禁用它,我將不得不編寫一個遞歸函數來查找網格子節點中的所有FrameworkElements,並設置IsEnabled = false。

相關問題