Why is my window transparent when using AllowsTransparency="True"

I'm attempting to make a translusent popup that covers the entire screen using WPF. The idea is to effectively create the light box style effect that we all see regularly when using assorted webpages. The application runs full screen (no option to close, minimise, etc) and replaces the windows shell. Because of this the window needs to stretch to cover the entire of the screen. The desired effect is to have a new window pop up covering the full screen. This window will have a translucent background with some central content that will be completely opaque. Interaction with the central content will be the only way for the user to interact with the application.

The problem that I am facing is the when AllowsTransparency is set to False the Window is not transparent, as you would expect. But when I set AllowsTransparency="True" then the window and all its contents (including the central content) is completely transparent. The new window, while invisible is there and is stopping any interaction with they system.

Has any one else encountered this problem, of windows not being visible at all when AllowsTransparence="true" is set, or even better found a solution or work around for it?

The xaml for the window is:

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

I ran into something similar the other day. For some reason when you set AllowsTransparency="True" you must also specify a Width and a Height for the Window otherwise the whole thing becomes invisible.

I did the same thing you did and also set the WindowState to Maximized but the Window was no where to been seen until I specified a Width and Height.


Your Grid is appearing above your other elements in the z-order, so clicks will be intercepted by it. To turn hit testing off for that Grid , set IsHitTestVisible="false" .


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

链接地址: http://www.djcxy.com/p/25914.html

上一篇: 用透明度重绘客户区

下一篇: 为什么使用AllowsTransparency =“True”时我的窗口是透明的?