В данной статье люди знакомые c технологией WPF не найдут ничего нового. Это всего лишь краткий обзор того, чем еще можно порадовать себя, используя данную технологию.
Все мы знаем как иногда раздражают всякого рода MessageBox-ы, они всегда вылетают как раз не к стати, сбивают нас с мысли посторонним звуком, да и выглядят ужасно. Ведь уже никто не читает что на них написано.
В этой статье я покажу вам пример того, как можно создать менее раздражающую замену стандартному MessageBox-у, используя технологию Windows Presentation Foundation.

Можно было бы сделать это и на обычном WinAPI, но его средствами мне не удалось добиться сглаживания при скруглении углов, к тому же много ручного труда, к счастью сейчас не середина 90x и у нас есть игрушки помощнее.
Далее будет исходный код и краткие пояснения.

XAML код нашего окна:
Код TransparentMsg.xaml
<Window x:Class="roundedcornersWPF.TransparentMsg"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TransparentMsg" Height="300" Width="300" WindowStyle="None" AllowsTransparency="True" Background="Transparent">
<!--С этим все ясно, единственное что хочется отметить, WindowStyle="None" является единственно возможным значением при Background="Transparent"
-->
<Grid Background="Transparent">

<Grid Background="Transparent" Opacity="0.5" Name="TranspGrid1">
<Border Name="mask" Background="#0f1d2a" CornerRadius="10" />
<!--Скругляем углы-->
</Grid>
<Label Content="" HorizontalAlignment="Left" Margin="15,15,0,0" Name="label1" VerticalAlignment="Top" Foreground="White" FontFamily="Times New Roman" FontSize="25">
<!--Этот элемент будет использоваться для вывода нашего сообщения.
Так же по желанию можно включить эффект свечения текста, просто расскомментировав следующие строки
<Label.BitmapEffect>
<OuterGlowBitmapEffect GlowColor="#00adef" GlowSize="5" Opacity="0.5" />
</Label.BitmapEffect>
-->
</Label>
</Grid>
</Window>


Код TransparentMsg.xaml.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Shapes;
using System.Windows.Media.Animation;

namespace roundedcornersWPF
{
/// /// Interaction logic for TransparentMsg.xaml
///
public partial class TransparentMsg : Window
{
public TransparentMsg(String Message)
{
InitializeComponent();
//инициализация нашего окна и прямо тут задаем все значения
this.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen; //ставим окно по центру экрана
label1.SizeChanged += new SizeChangedEventHandler(label1_SizeChanged); //следим за размером label1 чтобы подстроить размер окна под него
label1.Content = Message; //наше сообщение
this.Topmost = true; //закрепляем наше окно поверх всех окон
this.ShowInTaskbar = false; //и не показываем его в таскбаре
StartAnimation(); //запускаем анимацию (дело вкуса ;)
}

void label1_SizeChanged(object sender, SizeChangedEventArgs e)
{
this.Width = label1.ActualWidth + 30; //меняем размер окна..
this.Height = label1.ActualHeight + 35; //в зависимости от размера label1 (размер label1 зависит от сообщения)
}
private void StartAnimation()
{
/* анимация:
* меняем значение opacity от 0 до 0.7 и обратно
* время полуцикла - 4 секунды
* повторяем бесконечно
*/
DoubleAnimation da = new DoubleAnimation();
da.From = 0;
da.To = 0.7;
da.Duration = TimeSpan.FromSeconds(4);
da.AutoReverse = true;
da.RepeatBehavior = RepeatBehavior.Forever;
TranspGrid1.BeginAnimation(Grid.OpacityProperty, da);
}

}
}

Сообщение выводится так:
Window tMsg = new TransparentMsg("Тут текст сообщения");
tMsg.Show();

http://www.youtube.com/watch?v=9dCRiwHOeCs
Видео рабочего примера на youtube
P.S.
Пока в данном примере сообщение никак не убирается, но можно добавить хук на клавиатуру и мышь и закрывать окно при движении мыши нажатии на любую клавишу, как это и делается в Enso Launcher.

P.P.S. ДЛЯ МОДЕРАТОРОВ: сорри! вот этот вариант выглядит лучше… не разобрался как код подсвечивать, ну и ладно…