WPF模态窗口透明度

时间:2013-02-20 10:42:54

标签: wpf xaml styling

我创建了一个模态WPF窗口,如下所示:

enter image description here

以下是窗口的代码:

<Window x:Class="Dionysus.Core.Controls.ModalWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="ModalWindow" AllowsTransparency="True" Background="Transparent" WindowStyle="None">

<Grid Name="MainGrid">
    <Rectangle Fill="Gray" Opacity="0.7" />
</Grid>

然后按如下方式添加“ErrorControl”:

MainGrid.Children.Add(uc);

问题是,一旦我展开堆栈跟踪,控件透明度也会发生变化:

enter image description here

我认为这与ScrollViewer使用不正确的透明度有关,即使用Rectangle而不是包含Window

我还将拥有Opacity的{​​{1}}的{​​{1}}设置为1,然后绑定UserControl

ScrollViewer

任何人都可以帮助我吗?

-

更新

以下是插入Opacity

<ScrollViewer Background="WhiteSmoke" Opacity="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}, Path=Opacity}"> 的代码
UserControl

2 个答案:

答案 0 :(得分:0)

如果您的窗口大小固定且无法调整大小,则可以使用以下技巧:

<Grid>
    <Border BorderThickness="100" BorderBrush="Gray" Opacity="0.7">
        <Grid Background="White" Grid.Column="1" Grid.Row="1" x:Name="contentPlaceHolder">
            <TextBlock  Text="HELLO WORLD" HorizontalAlignment="Center" VerticalAlignment="Center"/>
        </Grid>
    </Border>
</Grid>

但是,您的Window不太可能总是具有相同的大小,因此为了使其更具动态性,您可以按如下方式更改Window的布局:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition Width="YourDesiredSize"/>
        <ColumnDefinition/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition Height="YourDesiredSize"/>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <Rectangle Fill="Gray" Opacity="0.7" Grid.Row="0" Grid.ColumnSpan="3"/>
    <Rectangle Fill="Gray" Opacity="0.7" Grid.Row="2" Grid.ColumnSpan="3"/>
    <Rectangle Fill="Gray" Opacity="0.7" Grid.Row="1" Grid.Column="0"/>
    <Rectangle Fill="Gray" Opacity="0.7" Grid.Row="1" Grid.Column="2"/>

    <Grid Grid.Column="1" Grid.Row="1" Background="White" x:Name="contentPlaceHolder">
        <TextBlock  Text="HELLO WORLD" HorizontalAlignment="Center" VerticalAlignment="Center"/>
    </Grid>
</Grid>

此窗口的结果放在另一个窗口的顶部或多或少看起来像这样:

transparent scrollviewer

然后,不是添加到MainGrid,而是将UserControl添加到contentPlaceHolder,或者您想要调用它:

contentPlaceHolder.Children.Add(uc);

答案 1 :(得分:0)

好的,所以我找到了一个适合我的解决方案,我确信它不是最好的,但它可能会帮助有问题的人。

问题是我添加到UserControl的{​​{1}}中的控件是透明的,虽然我无法弄清楚原因,但我找到了一个简单的解决方法。

通过将Window的{​​{1}}属性更改为所需的OpacityMask颜色,即使控件不透明度发生变化,它也会被UserControl屏蔽掉你供应。

Background

希望它有所帮助!