owenmelbz
owenmelbz

Reputation: 6564

Animating Blink Effect C#

I'm working on a project where I simply want the screen to blink.

I've never coded C# or used Visual Studio before so I've not got a clue what I'm doing.

I've just knocked up a quick javascript version of what I'm trying to do, you can see it here.

http://jsfiddle.net/OwenMelbz/73Le7/

I've attached the VS project files http://www.mediafire.com/?6cji3czfsc6f5h3

Here is what I've got at the moment in my xaml.cs file.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApplication3
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        private static System.Timers.Timer testTimer;

        public MainWindow()
        {
            InitializeComponent();
            testTimer = new System.Timers.Timer(5000); // 5 seconds
            testTimer.Elapsed += new ElapsedEventHandler(OnTimerElapsed);

            testTimer.Interval = 5000;
            testTimer.Enabled = true;

        }

        public void OnTimerElapsed(object source, ElapsedEventArgs e)
        {
            this.Dispatcher.Invoke((Action)(() =>
            {
                b1.Height = 420;
                b2.Height = 420;
            }));
            this.Dispatcher.Invoke((Action)(() =>
            {
                b1.Height = 0;
                b2.Height = 0;
                System.Threading.Thread.Sleep(100);
            }));
        }
    }
}

And heres what I've got in the MainWindow.xaml

<Window x:Class="WpfApplication3.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="1440"
        Name="Winda" AllowsTransparency="True" WindowStyle="None"
        Opacity="1" Topmost="True" WindowStartupLocation="CenterScreen"
        WindowState="Maximized" IsHitTestVisible="False" ShowInTaskbar="False" Background="Transparent">
    <Grid>
        <Rectangle Fill="Black" HorizontalAlignment="Left" Height="0" Stroke="Black" VerticalAlignment="Top" Width="1440" Stretch="Fill" Name="b1"/>
        <Rectangle Fill="Black" HorizontalAlignment="Left" Height="0" Stroke="Black" VerticalAlignment="Bottom" Width="1440" Margin="0"  Stretch="Fill" Name="b2"/>

    </Grid>
</Window>

From the JavaScript demo, I hope you can see what I'm trying to do. So any help would be much appreciated!

Thank you.

Upvotes: 0

Views: 2493

Answers (1)

Fede
Fede

Reputation: 44038

<Window x:Class="MiscSamples.BlinkingWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="ScreenBlink" Height="300" Width="300">
    <Window.Resources>
        <Storyboard x:Key="Storyboard" Duration="00:00:05.10" RepeatBehavior="Forever">
            <DoubleAnimationUsingKeyFrames Storyboard.TargetName="Trans1" Storyboard.TargetProperty="ScaleY">
                <DiscreteDoubleKeyFrame KeyTime="00:00:00" Value="0"/>
                <DiscreteDoubleKeyFrame KeyTime="00:00:04.99" Value="0"/>
                <EasingDoubleKeyFrame KeyTime="00:00:05" Value="1"/>
                <EasingDoubleKeyFrame KeyTime="00:00:05.1" Value="0"/>
            </DoubleAnimationUsingKeyFrames>
            <DoubleAnimationUsingKeyFrames Storyboard.TargetName="Trans2" Storyboard.TargetProperty="ScaleY">
                <DiscreteDoubleKeyFrame KeyTime="00:00:00" Value="0"/>
                <DiscreteDoubleKeyFrame KeyTime="00:00:04.99" Value="0"/>
                <EasingDoubleKeyFrame KeyTime="00:00:05" Value="1"/>
                <EasingDoubleKeyFrame KeyTime="00:00:05.1" Value="0"/>
            </DoubleAnimationUsingKeyFrames> 
        </Storyboard>
    </Window.Resources>
    <Window.Triggers>
        <EventTrigger RoutedEvent="Loaded">
            <EventTrigger.Actions>
                <BeginStoryboard Storyboard="{StaticResource Storyboard}"/>
            </EventTrigger.Actions>
        </EventTrigger>
    </Window.Triggers>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>

        <Rectangle Fill="Black">
            <Rectangle.RenderTransform>
                <ScaleTransform ScaleY="0" x:Name="Trans1"/>
            </Rectangle.RenderTransform>
        </Rectangle>
        <Rectangle Fill="Black" Grid.Row="1" RenderTransformOrigin="0.5,1.0">
            <Rectangle.RenderTransform>
                <ScaleTransform ScaleY="0" x:Name="Trans2"/>
            </Rectangle.RenderTransform>
        </Rectangle>
    </Grid>
</Window>

Code Behind:

using System.Windows;

namespace MiscSamples
{
    public partial class BlinkingWindow : Window
    {
        public BlinkingWindow()
        {
            InitializeComponent();
        }
    }
}

Upvotes: 4

Related Questions