我正在努力学习WPF,到目前为止我喜欢它。但是,有些东西缺失或只是我不理解的东西。我们如何在WPF中显示多层控件?附上,截图提供了我想要做的很好的想法。我有一个窗口,我想在它上面显示其他东西。我怎么能这样做?
谢谢!
Screenshot http://www.freeimagehosting.net/uploads/3c087f7af6.png
答案 0 :(得分:4)
将两个元素放置在网格中的同一行/列中,只需将它们覆盖即可。然后,您可以在每个元素上使用“可见性”来显示/隐藏它们。例如:
<Grid>
... row/column definitions
<Grid Grid.Row="0" Grid.Column="0">
... main content here
</Grid>
<Grid Grid.Row="0" Grid.Column="0" x:Name="grid2">
... overlaid content here
</Grid>
</Grid>
现在,重叠的内容将显示在主要内容内容的顶部。将grid2.Visibility设置为Visible / Hidden将显示/隐藏您的重叠内容。
答案 1 :(得分:2)
我可以想到两种方法来实现这种效果(窗口顶部延伸到窗口边界的非矩形半透明覆盖层)。
第一个选项,不要在生产代码中使用它(AllowTransparency很慢且非常多) - 使窗口大于实际内容,设置AllowTransaprencey =“True”,使窗口“外部”区域透明,现在你需要为弹出窗口做的就是在与“窗口”相同的容器中添加另一个视觉效果。
第二个选项,使用弹出窗口,你必须仔细定位你的弹出窗口,通过互操作调用SetWindowRgn使其成为非矩形并调用设置透明度值的Win32 API函数(对不起,暂不记住此名称) )使其半透明。
第一个选项很容易实现,并且看起来比第二个选项更好,但速度慢,你会遇到各种奇怪的错误(包括使用一些显示驱动程序的粉碎) - 我从经验中知道这一点,当我切换时我从AllowTransparency卖给SetWindowRgn的软件90%的粉碎报告都消失了。
第二个选项需要大量的本机Win32 API调用,但它应该可以工作。
答案 2 :(得分:2)
您可以使用adorner layer进行叠加。它基本上是一个覆盖任何装饰元素的渲染表面。
答案 3 :(得分:1)
我自己对WPF了解不多,但是你所追求的是Panel.ZIndex附属物,也许是吗?
答案 4 :(得分:0)
你可以通过在网格中叠加东西来实现类似的效果(如果它们位于同一个单元格中,事物就会叠加在一起),但是我的蜘蛛意识会告诉我这只是另一个窗口定义类似的东西:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="SubWindow" Height="100" Width="100" WindowStyle="None" AllowsTransparency="True" Opacity="0.5" >
然后您可以通过执行以下操作在主窗口中显示它:
SubWindow sw = new SubWindow ();
sw.DoModal();
答案 5 :(得分:-2)
不确定您要完成的是什么,但是从我与WPF的短暂接触中,似乎您可以通过在两个窗口之间正确配置父\子关系来完成您所需的工作。我最近在Dobb博士的门户网站上有一个基本的“你好,世界”,可能会给你一些方向。
以下是培训教程视频的链接 - Dr. Dobb's TV您只需从列表中选择“构建标准WPF应用程序”视频...