Красивое диалоговое окно в .NET
Published in Полезные советы
Чтобы вместо стандартного MessageBox в приложении WPF использовать более современное и «красивое» окно, можно использовать средства самой Windows. Напишем класс-помощник, который будет выводить диалоговое окно, используя системную библиотеку comctl32.dll.
Imports System.Runtime.InteropServices ''' <summary> ''' "Красивое" диалоговое окно. ''' </summary> Public Module TaskDialogHelper <DllImport("comctl32.dll", CharSet:=CharSet.Unicode, PreserveSig:=False)> Public Function TaskDialog(hwndParent As IntPtr, hInstance As IntPtr, title As String, mainInstruction As String, content As String, buttons As TaskDialogButtons, icon As TaskDialogIcon) As TaskDialogResult End Function Public Enum TaskDialogResult As Integer Ok = 1 Cancel = 2 Retry = 4 Yes = 6 No = 7 Close = 8 End Enum <Flags> Public Enum TaskDialogButtons As Integer Ok = &H1 Yes = &H2 No = &H4 Cancel = &H8 Retry = &H10 Close = &H20 End Enum Public Enum TaskDialogIcon As Integer Shield = 65532 Information [Error] Warning End Enum End Module
Также в манифесте проекта необходимо раскомментировать следующий участок:
<dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency>
Использовать код можно таким образом:
Dim dr = TaskDialogHelper.TaskDialog(New System.Windows.Interop.WindowInteropHelper(Me).Handle, IntPtr.Zero, "Лаконичный заголовок окна", "Здесь будет основной текст сообщения.", "А здесь вспомогательный.", TaskDialogHelper.TaskDialogButtons.Yes Or TaskDialogHelper.TaskDialogButtons.No, TaskDialogHelper.TaskDialogIcon.Information)
Желательно также при выводе данного окна проверять версию операционной системы: данное окно можно использовать в Windows Vista и более современных (версия больше 6):
If (System.Environment.OSVersion.Version.Major >= 6) Then …