WPF和图层

时间:2009-02-15 08:37:31

标签: wpf .net-3.5

我正在努力学习WPF,到目前为止我喜欢它。但是,有些东西缺失或只是我不理解的东西。我们如何在WPF中显示多层控件?附上,截图提供了我想要做的很好的想法。我有一个窗口,我想在它上面显示其他东西。我怎么能这样做?

谢谢!

Screenshot http://www.freeimagehosting.net/uploads/3c087f7af6.png

6 个答案:

答案 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应用程序”视频...