.NET

индекс
121,03

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

Недавно по работе искал как вызвать какой-то системный диалог из 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 приложений.
+6
16 декабря 2009, 03:40
10

комментарии (4)

–1
outcoldman #
Мне казалось в code.msdn.microsoft.com/WindowsAPICodePack есть такое же. Хотя может быть и ошибаюсь.

Вообще сам такое написал на WinForms, чтобы работало везде одинаково (WinXP и выше).
0
Doomsday_nxt #
Действительно, там есть такое и не только. Зачем изобретать велосипед…
К тому же, если не ошибаюсь — некоторые функции WindowsAPICodePack работают и в WinXP (нету возможности проверить)
0
FallenGameR #
Честно говоря я не знал про WindowsAPICodePack. Сейчас скачал его, посмотрел семплы. В чем отличия от Ookii:
— API.
— Некоторые диалоги реализованы только под WinForms
— Не нашел Credentials диалога

В Ookii два варианта диалогов — с зависимостью от WinForms библиотек или с зависимостью от WPF. Совместимость с предыдущими виндами нужно проверять на конкретных диалогах.
0
Vladek #
Я делал реализацию вызова стандартных Progress Dialog-ов. Простейший из этих диалогов доступен начиная с Windows ME.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.