【问题标题】:how to absolute position a dialog view in WPF MVVM如何在 WPF MVVM 中绝对定位对话框视图
【发布时间】:2012-01-08 18:31:47
【问题描述】:

所以,我使用网格和堆栈面板很好地布置了我的所有控件。

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

我能想到的绝对定位此类对话框控件的唯一方法是使用我没有使用的画布。我需要它显示在定期布局的控件之上..

有哪些选择?

【问题讨论】:

  • 为什么不使用Window
  • 您希望将对话框完全显示在另一个窗口中,还是在现有窗口的边框之外?
  • 就像弹出另一个窗口一样?那太可怕了。
  • 我只想将它悬停在现有控件上,但在同一个窗口内.. 相当于 html 中的浮动 div。
  • 谢谢,不知道 adorner,现在就读下去

标签: wpf layout mvvm wpf-positioning


【解决方案1】:

您可以使用popup control(设置 PlacementRectangle 值来定位内容)或 Adorner 层来执行此操作。这里描述了装饰器技术:http://bignickolson.com/2009/10/15/overlaying-controls-in-wpf-with-adorners/

【讨论】:

  • 这实际上接近我所需要的。在这里,我面临不透明背景的问题。我的用户控件有一个圆角边框。如果我在弹出窗口中显示它,角落显示为白色..
  • 在弹出控件上设置 AllowsTransparency = true:msdn.microsoft.com/en-us/library/…
  • 感谢克里斯。这是朝着正确方向迈出的一步。有什么方法可以锁定它,以便在移动窗口时它保持相对于底层窗口?
【解决方案2】:

我认为您正在寻找的是将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

【讨论】:

  • 感谢富士,但 zIndex 是否允许绝对定位?在您的示例中,控件仍在该网格内。在我的情况下,它将是一个可能比该网格更大的用户控件。这就是我需要绝对定位的原因。
  • 是的,这是真的。我的解决方案仅在您希望该 Grid 中的对话框时才有效,但只要您将其保留在 MainWindow Grid 中,它就应该允许您将其放置在其他所有内容之上(在 Window Borders ofc 内)。
【解决方案3】:

我相信this 是您正在寻找的……您可以将控件放在您的装饰器中,然后通过更改 bool 属性来显示或隐藏它……您可以将行为自定义为你的喜欢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 2021-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多