如何在WPF MVVM中绝对定位对话视图

如何在WPF MVVM中绝对定位对话视图

问题描述:

所以,我已经使用网格和堆栈面板很好地布置了我的所有控件。如何在WPF MVVM中绝对定位对话视图

在某些情况下,我想显示一个对话框层(添加首选项等)。它不需要模态,它不需要有透明背景..我只是需要它很好,不显眼,并绝对定位..

我可以想到的唯一方法来定位这样的对话框控件绝对是,使用画布,我不使用。我需要它显示在定期布置的控制之上..

有什么选择?

+0

为什么世界上不使用“窗口”? – 2012-01-08 18:32:57

+0

您想要在另一个窗口内或在现有窗口的边界外完全显示对话框? – 2012-01-08 18:37:49

+0

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

您可以使用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

我认为你要找的是将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

我相信this是你在找什么....你可以把你的控制你的装饰器,然后通过更改布尔属性,您可以显示或隐藏它...您可以自定义您喜欢的行为