Принудительное окно для мигания, когда определенное событие происходит в C # / WPF

Я использую C # / WPF для создания приложения. В этом приложении я хочу моргнуть окно, если происходит определенное событие, чтобы пользователь этого приложения знал, что что-то произошло. Как я могу получить это в своем приложении WPF для C #.

Как в Yahoo Messenger, если вы получаете сообщение, тогда окно сообщения мигает, чтобы получить фокус, я хочу использовать этот эффект в своем приложении.

Мигание windows и панели задач аналогично уведомлениям IM может быть выполнено в WPF с использованием следующего кода. Он использует PlatformInvoke для вызова функции WinAPI FlashWindowEx с использованием Win32- FlashWindowEx Application.Current.MainWindow WPF. FlashWindowEx

Код

 public class FlashWindowHelper { private IntPtr mainWindowHWnd; private Application theApp; public FlashWindowHelper(Application app) { this.theApp = app; } public void FlashApplicationWindow() { InitializeHandle(); Flash(this.mainWindowHWnd, 5); } public void StopFlashing() { InitializeHandle(); if (Win2000OrLater) { FLASHWINFO fi = CreateFlashInfoStruct(this.mainWindowHWnd, FLASHW_STOP, uint.MaxValue, 0); FlashWindowEx(ref fi); } } private void InitializeHandle() { if (this.mainWindowHWnd == IntPtr.Zero) { // Delayed creation of Main Window IntPtr as Application.Current passed in to ctor does not have the MainWindow set at that time var mainWindow = this.theApp.MainWindow; this.mainWindowHWnd = new System.Windows.Interop.WindowInteropHelper(mainWindow).Handle; } } [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool FlashWindowEx(ref FLASHWINFO pwfi); [StructLayout(LayoutKind.Sequential)] private struct FLASHWINFO { ///  /// The size of the structure in bytes. ///  public uint cbSize; ///  /// A Handle to the Window to be Flashed. The window can be either opened or minimized. ///  public IntPtr hwnd; ///  /// The Flash Status. ///  public uint dwFlags; ///  /// The number of times to Flash the window. ///  public uint uCount; ///  /// The rate at which the Window is to be flashed, in milliseconds. If Zero, the function uses the default cursor blink rate. ///  public uint dwTimeout; } ///  /// Stop flashing. The system restores the window to its original stae. ///  public const uint FLASHW_STOP = 0; ///  /// Flash the window caption. ///  public const uint FLASHW_CAPTION = 1; ///  /// Flash the taskbar button. ///  public const uint FLASHW_TRAY = 2; ///  /// Flash both the window caption and taskbar button. /// This is equivalent to setting the FLASHW_CAPTION | FLASHW_TRAY flags. ///  public const uint FLASHW_ALL = 3; ///  /// Flash continuously, until the FLASHW_STOP flag is set. ///  public const uint FLASHW_TIMER = 4; ///  /// Flash continuously until the window comes to the foreground. ///  public const uint FLASHW_TIMERNOFG = 12; ///  /// Flash the spacified Window (Form) until it recieves focus. ///  ///  ///  public static bool Flash(IntPtr hwnd) { // Make sure we're running under Windows 2000 or later if (Win2000OrLater) { FLASHWINFO fi = CreateFlashInfoStruct(hwnd, FLASHW_ALL | FLASHW_TIMERNOFG, uint.MaxValue, 0); return FlashWindowEx(ref fi); } return false; } private static FLASHWINFO CreateFlashInfoStruct(IntPtr handle, uint flags, uint count, uint timeout) { FLASHWINFO fi = new FLASHWINFO(); fi.cbSize = Convert.ToUInt32(Marshal.SizeOf(fi)); fi.hwnd = handle; fi.dwFlags = flags; fi.uCount = count; fi.dwTimeout = timeout; return fi; } ///  /// Flash the specified Window (form) for the specified number of times ///  /// The handle of the Window to Flash. /// The number of times to Flash. ///  public static bool Flash(IntPtr hwnd, uint count) { if (Win2000OrLater) { FLASHWINFO fi = CreateFlashInfoStruct(hwnd, FLASHW_ALL | FLASHW_TIMERNOFG, count, 0); return FlashWindowEx(ref fi); } return false; } ///  /// A boolean value indicating whether the application is running on Windows 2000 or later. ///  private static bool Win2000OrLater { get { return Environment.OSVersion.Version.Major >= 5; } } } 

использование

 var helper = new FlashWindowHelper(Application.Current); // Flashes the window and taskbar 5 times and stays solid // colored until user focuses the main window helper.FlashApplicationWindow(); // Cancels the flash at any time helper.StopFlashing(); 

Вы можете использовать class TaskBarItem, чтобы мигать значок панели задач вашего приложения. Вот некоторые ресурсы, которые помогут вам в этом:
http://social.msdn.microsoft.com/Forums/en/wpf/thread/369bc5ee-a9a7-493f-978f-27a8ddedea06
http://www.bobpowell.net/flashbar.htm

Затем вы можете мигать , встряхиваться , исчезать или исчезать или что-то другое, используя другие эффекты, используя WPF Animations. Это очень просто и требует почти никакого кода вообще, если у вас есть Expression Blend, работа становится еще проще.

Установка свойства ProgressState в TaskbarItemProgressState.Indeterminate будет мигать значком зеленым цветом. Вы не должны использовать индикатор выполнения.

http://msdn.microsoft.com/en-us/library/system.windows.shell.taskbaritemprogressstate.aspx