我想在XAML Metro App中模擬模態對話框。如何在XAML Metro應用程序中禁用網格(面板)?
所以我打算在所有的控件上設置.IsEnabled = false,除了將作爲模態對話框構成的控件之外。
顯然,IsEnabled不在Grid中,不在Panel中不在FrameworkElement中。 如何禁用它不使用戶控制出來?
我想辛諾夫斯基削減了這麼多的角落,整個事情現在更像是一個埃舍爾樓梯。我放棄了我的信仰。請幫忙
我想在XAML Metro App中模擬模態對話框。如何在XAML Metro應用程序中禁用網格(面板)?
所以我打算在所有的控件上設置.IsEnabled = false,除了將作爲模態對話框構成的控件之外。
顯然,IsEnabled不在Grid中,不在Panel中不在FrameworkElement中。 如何禁用它不使用戶控制出來?
我想辛諾夫斯基削減了這麼多的角落,整個事情現在更像是一個埃舍爾樓梯。我放棄了我的信仰。請幫忙
對不起,我有點遲到了......
這是我如何創建一個模式彈出 - 我用一個彈出式對話框,在頂部和底部是透明的,因此,它的背後都會顯示在通過。當彈出窗口打開時,我將其大小設置爲覆蓋整個屏幕。
彈出窗口的頂部和底部也設置爲autosize(height = *),以便填充屏幕的整個頂部和底部。這可以防止任何輸入進入下面的網格。
這裏是我的彈出窗口在Visual Studio中的屏幕截圖:
彈出是5行,3對話框本身和2的透明頂部和底部的網格。
下面是彈出窗口在我的應用程序中的外觀。很顯然,網格通過透明的頂部和底部顯示。由於彈出窗口填充整個屏幕,所以任何輸入(鍵盤或鼠標)都會進入它,而不是下面的網格,從而使彈出窗口像模態對話框一樣。
被警告,雖然,透過這個策略,你必須處理這些事件:
設置爲IsHitTestVisible = false
的背景內容。
此外,您可以將焦點設置爲模態層根目錄中的某些內容,並在模態層根上將TabNavigation
設置爲Cycle
,以確保用戶無法將製表符切換/移出標籤。還要確保模態圖層全部都是命中測試 - 例如Transparent
或有一些其他填充,以便用戶無法點擊它。
同時確保沒有Popups
顯示,而你的模態層是可見的。
不幸的是,似乎沒有人知道(除Skakun先生誰給了錯誤的答案,從來沒有打擾修改它)。
因此,我的解決方案(最簡單的)是使問題中的元素隱藏 - 我找不到任何其他方式來'禁用'網格。
如果我想正確禁用它,我將不得不編寫一個遞歸函數來查找網格子節點中的所有FrameworkElements,並設置IsEnabled = false。
我有這個想法,但在可見性而不是解決。你確定這有效嗎?你不能從鍵盤輸入文本框? –
不,他是對的,'IsHitTestVisible'完全禁用。 –
**這是錯誤的答案**。你仍然可以使用鍵盤 - 而這正是我想要避免的。 –