Pull to refresh

Системные диалоги в .NET

Reading time2 min
Views2.3K
Недавно по работе искал как вызвать какой-то системный диалог из WPF. Оказалось, что в WPF такого диалога нет, но зато существует библиотека под .NET, которая позволяет вызывать системные диалоги.

Сайт библиотеки: www.ookii.org/software/dialogs



Код, который позволяет такое окно создать:

using( var dialog = new TaskDialog( ) )
{
    dialog.WindowTitle = title;
    dialog.MainInstruction = mainInstruction;
    dialog.Content = exception.Message;
    dialog.Width = 250;
    dialog.AllowDialogCancellation = true;
    dialog.MainIcon = TaskDialogIcon.Error;

    if( !string.IsNullOrEmpty( debugDetails ) )
    {
        dialog.ExpandedInformation = debugDetails;
        dialog.FooterIcon = TaskDialogIcon.Information;
        dialog.Footer = "<a href=\"\">Скопировать в буфер детали исключения</a>";
        dialog.EnableHyperlinks = true;
        dialog.HyperlinkClicked += delegate
        {
            Clipboard.SetText( debugDetails );
        };
    }

    dialog.Buttons.Add( new TaskDialogButton( ButtonType.Ok ) );
    dialog.ShowDialog( );
}


Диалогов в библиотеке много, все симпатичные. Есть демка, в которой можно все пощелкать.

Большинство диалогов появилось в ОС только начиная с Vista. Так что если требуется обеспечить поддержку WinXP, то нужно написать свою обертку, проверяющую TaskDialog.OSSupportsTaskDialogs свойство и рисующую что-то более простое, например, на MessageBox, если TaskDialog создать невозможно. Я так для своего последнего проекта и сделал. Для некоторых диалогов такой откат к более старым системным версиям уже включен в библиотеку.

В общем, полезная штука для WinForms и WPF приложений.
Tags:
Hubs:
Total votes 16: ↑11 and ↓5+6
Comments4

Articles