使用AllowTransparency =“True”时,为什么我的窗口是透明的

时间:2013-05-07 07:51:30

标签: wpf transparency

我正在尝试使用WPF创建覆盖整个屏幕的translusent弹出窗口。我们的想法是有效地创建我们在使用各种网页时经常看到的灯箱风格效果。 应用程序全屏运行(无法关闭,最小化等选项)并替换Windows shell。因此,窗口需要拉伸以覆盖整个屏幕。 所需的效果是弹出一个覆盖全屏的新窗口。此窗口将具有半透明背景,其中一些中心内容将完全不透明。与中心内容的交互将是用户与应用程序交互的唯一方式。

我面临的问题是当AllowTransparency设置为False时,Window不是透明的,正如您所期望的那样。但是当我设置AllowTransparency =“True”时,窗口及其所有内容(包括中心内容)都是完全透明的。新窗口虽然不可见,但正在停止与系统的任何交互。

有没有其他人遇到过这个问题,当设置了AllowTransparence =“true”时,窗口根本看不到,或者甚至更好地找到解决方案或解决它?

窗口的xaml是:

<Window x:Class="Views.BorderedPopupView"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
                 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
                 mc:Ignorable="d" Background="{DynamicResource WindowBackground}" AllowsTransparency="True">
        <Window.Resources>
            <SolidColorBrush x:Key="TranslusentBrush" Opacity="0.1"/>
            <SolidColorBrush x:Key="WindowBackground" Color="Transparent"/>
        </Window.Resources>
        <Viewbox StretchDirection="Both" Stretch="Fill" Margin="5,0,13,-8" >    
        <Grid Height="768" Width="1024" Background="{StaticResource TranslusentBrush}">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="2*"></ColumnDefinition>
                <ColumnDefinition Width="6*"></ColumnDefinition>
                <ColumnDefinition Width="2*"></ColumnDefinition>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="2*"></RowDefinition>
                <RowDefinition Height="6*"></RowDefinition>
                <RowDefinition Height="2*"></RowDefinition>
            </Grid.RowDefinitions>
                <Grid Opacity="1" Grid.Row="1" Grid.Column="1">
                    <ContentControl x:Name="Popup" Grid.Row="1" Grid.Column="1"/>
                </Grid>

            </Grid>
            </Viewbox>
    </Window>

3 个答案:

答案 0 :(得分:1)

前几天我遇到了类似的事情。出于某种原因,当您设置AllowTransparency =“True”时,您还必须为窗口指定宽度和高度,否则整个事物将变为不可见。

我做了同样的事情,并将WindowState设置为Maximized,但在指定宽度和高度之前,窗口无处可见。

答案 1 :(得分:0)

您的Grid出现在z顺序中的其他元素上方,因此点击将被拦截。要为Grid关闭点击测试,请设置IsHitTestVisible="false"

答案 2 :(得分:0)

如果您不想调整窗口大小,请尝试将ResizeMode =“CanResizeWithGrip”或ResizeMode =“NoResize”设置为窗口。