2012-01-08 23 views
0

所以,我已經使用網格和堆棧面板很好地佈置了我的所有控件。如何在WPF MVVM中絕對定位對話視圖

在某些情況下,我想顯示一個對話框層(添加首選項等)。它不需要模態,它不需要有透明背景..我只是需要它很好,不顯眼,並絕對定位..

我可以想到的唯一方法來定位這樣的對話框控件絕對是,使用畫布,我不使用。我需要它顯示在定期佈置的控制之上..

有什麼選擇?

+0

爲什麼世界上不使用「窗口」? – 2012-01-08 18:32:57

+0

您想要在另一個窗口內或在現有窗口的邊界外完全顯示對話框? – 2012-01-08 18:37:49

+0

在彈出另一個窗口?那太可怕了。 – 2012-01-08 18:37:54

回答

2

您可以使用popup control(設置PlacementRectangle值來定位內容)或Adorner圖層來執行此操作。這裏描述裝飾者技巧:http://bignickolson.com/2009/10/15/overlaying-controls-in-wpf-with-adorners/

+0

彈出窗口+1。您可以將它們放置在頂部/底部/左側/右側。 – Sabuncu 2012-01-08 19:24:37

+0

這實際上接近我所需要的。這裏我面臨着一個不透明背景的問題。我的用戶控件有一個帶圓角的邊框。如果我在彈出窗口中顯示它,角落顯示爲白色。 – 2012-01-10 01:24:06

+1

在彈出控件上設置AllowsTransparency = true:http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives。 popup.allowstransparency.aspx – 2012-01-10 01:24:54

0

我認爲你要找的是將Panel.ZIndex設置爲對話框的高值。然後只需設置可見性即可隱藏對話框。 http://msdn.microsoft.com/en-us/library/system.windows.controls.panel.zindex.aspx

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <TextBlock Panel.ZIndex="9999" Background="Green">This TextBlock will always be on top as long as it is visible.</TextBlock> 
     <TextBlock Background="Red">Test</TextBlock> 
    </Grid> 
</Window> 

您可以在這個例子中有對話框,然後結合本: WPF C# InputBox

+0

謝謝富士,但zIndex以某種方式允許絕對定位?在你的例子中,控件仍然在那個網格中。在我的情況下,這將是一個用戶控件,可能比那個網格更大......這就是爲什麼我需要絕對定位。 – 2012-01-10 01:22:52

+0

是的,的確如此。我的解決方案只適用於想要在該網格中的對話框,但只要將它保存在MainWindow網格中,它應該允許您將它放在其他所有內容(在窗口邊界ofc內)。 – eandersson 2012-01-28 14:22:13

0

我相信this是你在找什麼....你可以把你的控制你的裝飾器,然後通過更改布爾屬性,您可以顯示或隱藏它...您可以自定義您喜歡的行爲