WPF或Silverlight中的屏幕闪烁效果

时间:2008-10-10 11:46:19

标签: wpf silverlight xaml

我正在寻找一种方法来为我正在研究的全屏WPF应用程序创建一个“看起来很酷”效果 - 一种“屏幕闪烁”效果,可以激活或移动整个屏幕来发布闪亮的显示体验。我正在考虑创建一个带有突出显示渐变和透明背景的大矩形,可以在屏幕上进行动画制作。有任何想法如何在XAML中有效地完成这项工作?

4 个答案:

答案 0 :(得分:5)

我想出了一个看起来很不错的解决方案。我在Blend 2.0 SP1中编写的一些示例XAML如下所示:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="ScreenGlintApplication.Window1"
    x:Name="Window"
    Title="Window1"
    Width="500" Height="250" Background="#FF000000" Foreground="#FF3EE229" >

    <Grid x:Name="LayoutRoot">
        <TextBlock TextWrapping="Wrap" FontSize="40" >
        <Run Text="This is some sample text to have something to work with. Have a nice day! /Johan"/>
        </TextBlock>
        <Canvas Panel.ZIndex="99" >
        <Rectangle x:Name="ScreenGlintRect"  
            Width="{Binding Path=ActualWidth, ElementName=Window, Mode=Default}" 
            Height="{Binding Path=ActualHeight, ElementName=Window, Mode=Default}" 
            Opacity="0.4" >
            <Rectangle.Triggers> 
                <EventTrigger RoutedEvent="Rectangle.Loaded"> 
                  <BeginStoryboard> 
                    <Storyboard> 
                    <DoubleAnimation Storyboard.TargetName="ScreenGlintRect" 
                    Storyboard.TargetProperty="(Canvas.Left)"
                    From="-500" To="1000" Duration="0:0:2" />
                    </Storyboard> 
                  </BeginStoryboard> 
                </EventTrigger> 
          </Rectangle.Triggers> 

            <Rectangle.Fill>
                <LinearGradientBrush StartPoint="0,1" EndPoint="1,1">
                    <GradientStop Color="Transparent" Offset="0.0" />
                    <GradientStop x:Name="GlintColor" Color="LightGreen" Offset="0.50" />
                    <GradientStop Color="Transparent" Offset="1" />
                </LinearGradientBrush>
            </Rectangle.Fill>
        </Rectangle>
        </Canvas>
    </Grid>
</Window>

一个选项是在后面的代码中执行此操作,如果您想要对动画进行精细控制,这非常简洁。例如:

    ScreenGlintRect.Width = Width;
    ScreenGlintRect.Height = Height;
    var animation = new DoubleAnimation
    {
        Duration = new Duration(TimeSpan.FromSeconds(2)),
        From = (-Width),
        To = Width * 2
    };
    ScreenGlintRect.BeginAnimation(Canvas.LeftProperty, animation);

这是我正在使用的代码,对我来说看起来不错。如果你有硬件加速,你可以尝试添加一些模糊。您可能需要调整代码并隐藏/显示矩形,但基本上就是这样。

答案 1 :(得分:2)

可以轻松地将任何透明面板放置在主网格的“顶部”上,并为放置在面板中的元素设置动画。要将面板“放在顶部”,只需将其放在XAML层次结构的末尾,在任何其他元素之后。或者,您可以使用“ZIndex”属性。

劳伦

答案 2 :(得分:0)

你可以把透明面板放在上面,就像LBugnion说的那样,但不要忘记有很多方法可以做到这一点:

  1. 将面板的可见性更改为隐藏。
  2. 将不透明度更改为0.
  3. 将颜色的Alpha更改为0.
  4. 如果您只更改Alpha,即使您没有看到颜色,它仍然可以点击

    关闭主题但是:尝试使效果微妙,并且可能有开/关选项。

答案 3 :(得分:0)

在进度栏上附加到this article的示例代码具有Vista样式进度条,其具有Vista样式闪烁。它使用边框和画笔以及转换器来创建动画。我不能说我完全理解那里的一切,但它很有效。应该很容易复制到你的需要。