(我正在尝试使用教程和文档来学习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