WPF中的外发光效果不适用于分层窗口?

时间:2011-01-22 00:34:01

标签: c# wpf effects

任何人都可以告诉我为什么/没有/ outerglow效果在我的WPF窗口上有效?这是代码的一个例子:

<Window x:Class="SocialShock_WPF_Client.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        AllowsTransparency="True" 
        WindowStyle='None' 
        Background="Transparent" 
        Loaded="Window_Loaded">
    <Grid>
        <Rectangle Margin="12" Name="rectangle1" Fill="#FFB75050">
            <Rectangle.BitmapEffect>
                <OuterGlowBitmapEffect GlowColor="Black" GlowSize="20" />
            </Rectangle.BitmapEffect>
        </Rectangle>
    </Grid>
</Window>

以及生成的图像:

http://img408.imageshack.us/img408/6213/1c1761f31ce6408d948e266.png

边缘没有光晕。 不仅光晕没有出现在矩形上,而且我添加到窗口的任何其他控件都不能接受发光。

编辑: 在.Net 4.0中

1 个答案:

答案 0 :(得分:10)

.NET 4.0中不再支持BitmapEffects。

来自MSDN

  

重要在.NET Framework 4或   之后,BitmapEffect类是   过时。如果你试图使用   BitmapEffect类,你会得到一个   过时的例外。不过时的   替代BitmapEffect类   是效果类。多数情况   情境,效果类是   明显更快。

没有非常好的替代品,但您可以尝试使用DropShadowEffect,其中ShadowDepth为0.示例

<Rectangle Margin="12" Name="rectangle1" Fill="#FFB75050">
    <Rectangle.Effect>
        <DropShadowEffect ShadowDepth="0"
                          Color="Black"
                          Opacity="1"
                          BlurRadius="12"/>
    </Rectangle.Effect>
</Rectangle>

如果我理解你的评论正确,

在代码中添加效果

DropShadowEffect dropShadowEffect = new DropShadowEffect();
dropShadowEffect.ShadowDepth = 0;
dropShadowEffect.Color = Colors.Black;
dropShadowEffect.Opacity = 1;
dropShadowEffect.BlurRadius = 12;
rectangle1.Effect = dropShadowEffect;

修改后面代码中的效果

DropShadowEffect dropShadowEffect = rectangle1.Effect as DropShadowEffect;
dropShadowEffect.BlurRadius = 24;