(我正在嘗試使用教程和文檔來學習WPF,並嘗試爲我的後端完整應用程序開發用戶界面,但我曾經說過,我聽說有人說學習曲線非常陡峭,但有時我想知道無論我想要做什麼實際上是WPF中很難做到的事情,或者如果它很簡單,但我在錯誤地思考,或者如果它不是這樣,它很簡單,但我恰好不知道如何。)WPF中的燈箱樣式彈出窗口 - 如何?
這是我目前的問題。我想點擊一下,點擊我的用戶界面的某個部分會彈出一個'彈出',用戶可以輸入更多信息。我想要一個'lightbox-style'彈出窗口,即彈出窗口對頁面是模式的,它會使頁面的其餘部分變暗以成爲注意的中心等等。這些在網站上常見。
有點搜索引導我到WPF彈出窗口控件。我添加了它,放入了我的內容,將IsOpen屬性設置爲True,並 - presto!彈出窗口。然後我添加了一個不可見的Rectangle,它覆蓋了我的整個窗口,並且當我想要打開彈出窗口時將其設置爲Visible。大!
所以現在我想動態地做到這一點,因爲有時我會加載一個記錄,有時需要在彈出窗口中打開另一個控件(一個UserControl)來編輯它的信息。所以我給自己一個叫做OpenPopup的方法。但我似乎無法找到使用WPF編寫此方法的方法。在Windows窗體我已經寫了:(我用VB.NET)
Sub ShowPopup (form as Form, ctrl as Control)
'Create 'rect' as new dark rectangle control
'Z-order it to the top
'form.Controls.Add 'rect'
'form.Controls.Add ctrl
'Z-order 'ctrl' to the top
'Center 'ctrl'
'Set focus to it
End Sub
但與WPF我遇到的問題:
1)我不能將它添加到WPF窗口,因爲它已經有一個孩子。
2)如果那個孩子是一個畫布,那也不算太壞。我可以檢測到,並將其添加到畫布。我必須找到一些方法來設置它的Left,Top等屬性和Width和Height,因爲這些似乎不是Rectangle控件的屬性,而是由Canvas對象擴展 - 在XAML中它們被稱爲Cavnas.Top但當我嘗試在代碼中使用它時,Intellisense未顯示它們。
3)但如果它是一個StackPanel?然後我的矩形將被堆疊在其他控件下面!而不是覆蓋他們!有沒有解決的辦法?
4)如果窗口只包含一個控件而根本沒有容器控件?
5)我認爲遇到更多問題。但是讓我們從這些開始。
在此先感謝您的幫助。
+1,尤其是最後一段。 OP的學習WPF的方法似乎是合理的 - 這與我自己的方法是一樣的 - 但這是一個非常好的方式來花費幾個令人沮喪的月份,在這期間你對WPF瞭解甚少。 – 2011-03-24 16:09:35
謝謝大家! @ Will,re#1:我的問題的前提是,是否有可能在全球範圍內重新使用任何窗口而不添加XAML或任何其他內容。這不是一個優點嗎? 回覆:MVVM和@Robert,謝謝你的提示。我同意並且我研究了MVVM,並且我非常喜歡它;我一定會繼續走下去。雖然你會同意它不會解決這裏發佈的問題。 – Fred 2011-03-27 01:33:18
@用戶好,這表明你的覆蓋被封裝在用戶控件中。創建一個通過代碼與UI交互的實際控件,其指數級更復雜... – Will 2011-03-27 03:11:40