0

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

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

有没有其他人遇到过这个问题,在设置 AllowsTransparence="true" 时窗口根本不可见,或者更好地找到解决方案或解决它?

窗口的 xml 是:

<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>
4

3 回答 3

1

前几天我遇到了类似的事情。出于某种原因,当您设置 AllowsTransparency="True" 时,您还必须为 Window 指定 Width 和 Height,否则整个事物将变得不可见。

我做了与你相同的事情,并将 WindowState 设置为最大化,但在我指定宽度和高度之前,无法看到窗口。

于 2013-05-08T06:06:52.470 回答
0

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

于 2013-05-07T09:49:12.693 回答
0

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

于 2013-05-08T06:26:02.450 回答