还在用MessageBox.Show()?你OUT了,弄了个自定义 C# Wpf MessageBox,共享一下,没写技术文档,但我想不难弄明白。
using GalaSoft.MvvmLight.CommandWpf;
using System;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media.Imaging;
namespace MvvmDlg
{
/// <summary>
/// Initializes a new instance of the Dlg class.
/// </summary>
public class Dlg
{
public Dlg() { }
private string title;
private string content;
private RelayCommand<bool> closeCmd;
private RelayCommand closeCancelCmd;
private static Dlg dlg;
private static Dialog dlgview;
private Visibility showNoCancel = Visibility.Collapsed;
private Visibility showCancel = Visibility.Collapsed;
private Uri iconUri;
private static bool dlgResult = false;
private static bool? dlgCanNullResult = null;
public bool BtnOKOrYes { get { return true; } }
public bool BtnNoOrCancel { get { return false; } }
public string Title { get { return title; } }
public string Content { get { return content; } }
public ICommand CloseCmd
{
get
{
if (this.closeCmd == null)
{
this.closeCmd = new RelayCommand<bool>(b =>
{
dlgResult = b;
dlgCanNullResult = b;
dlgview.Close();
});
}
return this.closeCmd;
}
}
public ICommand CloseCancelCmd
{
get
{
if (this.closeCancelCmd == null)
{
this.closeCancelCmd = new RelayCommand( ()=>
{
dlgCanNullResult = null;
dlgview.Close();
});
}
return this.closeCancelCmd;
}
}
public Visibility ShowNoCancel { get { return showNoCancel; } }
public Visibility ShowCancel { get { return showCancel; } }
private Uri SetIconUri(DlgIcon type)
{
Uri result;
switch (type)
{
case DlgIcon.Asterisk:
result = new Uri("pack://application:,,,/Asterisk.ico", UriKind.RelativeOrAbsolute);
break;
case DlgIcon.Error:
result = new Uri("pack://application:,,,/Error.ico", UriKind.RelativeOrAbsolute);
break;
case DlgIcon.Exclamation:
result = new Uri("pack://application:,,,/Exclamation.ico", UriKind.RelativeOrAbsolute);
break;
case DlgIcon.Hand:
result = new Uri("pack://application:,,,/Hand.ico", UriKind.RelativeOrAbsolute);
break;
case DlgIcon.Information:
result = new Uri("pack://application:,,,/Information.ico", UriKind.RelativeOrAbsolute);
break;
case DlgIcon.None:
result = new Uri("pack://application:,,,/None.ico", UriKind.RelativeOrAbsolute);
break;
case DlgIcon.Question:
result = new Uri("pack://application:,,,/Question.ico", UriKind.RelativeOrAbsolute);
break;
case DlgIcon.Stop:
result = new Uri("pack://application:,,,/Stop.ico", UriKind.RelativeOrAbsolute);
break;
case DlgIcon.Warning:
result = new Uri("pack://application:,,,/Warning.ico", UriKind.RelativeOrAbsolute);
break;
default:
result = new Uri("pack://application:,,,/Information.ico", UriKind.RelativeOrAbsolute);
break;
}
return result;
}
public static bool Show(string text, string title, DlgBtn btntype)
{
dlg = new Dlg();
dlgview = new Dialog();
dlg.content = text;
dlg.title = title;
dlg.iconUri = dlg.SetIconUri(DlgIcon.Information);
if (btntype != DlgBtn.ok)
dlg.showNoCancel = Visibility.Visible;
if (btntype == DlgBtn.okcancel)
dlgview.NoOrCancel.Content = "取消";
else if (btntype == DlgBtn.yesno)
{
dlgview.OkOrYes.Content = "是";
dlgview.NoOrCancel.Content = "否";
}
dlgview.DataContext = dlg;
dlgview.Icon = BitmapFrame.Create(dlg.iconUri);
dlgview.Owner = App.Current.MainWindow;
dlgview.ShowDialog();
dlg = null;
return dlgResult;
}
public static bool Show(string text, string title, string btncontent)
{
dlg = new Dlg();
dlgview = new Dialog();
dlg.content = text;
dlg.title = title;
dlg.iconUri = dlg.SetIconUri(DlgIcon.Information);
string[] bc = btncontent.Split('|');
dlgview.OkOrYes.Content = bc[0];
if (bc.Length == 2)
{
dlg.showNoCancel = Visibility.Visible;
dlgview.NoOrCancel.Content = bc[1];
}
dlgview.DataContext = dlg;
dlgview.Icon = BitmapFrame.Create(dlg.iconUri);
dlgview.Owner = App.Current.MainWindow;
dlgview.ShowDialog();
dlg = null;
return dlgResult;
}
public static bool Show(string text, string title, string btncontent, DlgIcon icontype)
{
dlg = new Dlg();
dlgview = new Dialog();
dlg.content = text;
dlg.title = title;
dlg.iconUri = dlg.SetIconUri(icontype);
string[] bc = btncontent.Split('|');
dlgview.OkOrYes.Content = bc[0];
if (bc.Length == 2)
{
dlg.showNoCancel = Visibility.Visible;
dlgview.NoOrCancel.Content = bc[1];
}
dlgview.DataContext = dlg;
dlgview.Icon = BitmapFrame.Create(dlg.iconUri);
dlgview.Owner = App.Current.MainWindow;
dlgview.ShowDialog();
dlg = null;
return dlgResult;
}
public static bool Show(string text, string title, DlgBtn btntype, DlgIcon icontype)
{
dlg = new Dlg();
dlgview = new Dialog();
dlg.content = text;
dlg.title = title;
if (btntype != DlgBtn.ok)
dlg.showNoCancel = Visibility.Visible;
if (btntype == DlgBtn.okcancel)
dlgview.NoOrCancel.Content = "取消";
else if (btntype == DlgBtn.yesno)
{
dlgview.OkOrYes.Content = "是";
dlgview.NoOrCancel.Content = "否";
}
dlg.iconUri = dlg.SetIconUri(icontype);
dlgview.DataContext = dlg;
dlgview.Icon = BitmapFrame.Create(dlg.iconUri);
dlgview.Owner = App.Current.MainWindow;
dlgview.ShowDialog();
dlg = null;
return dlgResult;
}
public static bool? CanNullShow(string text, string title)
{
dlg = new Dlg();
dlgview = new Dialog();
dlg.content = text;
dlg.title = title;
dlg.showNoCancel = dlg.showCancel = Visibility.Visible;
dlg.iconUri = dlg.SetIconUri(DlgIcon.Question);
dlgview.DataContext = dlg;
dlgview.Icon = BitmapFrame.Create(dlg.iconUri);
dlgview.Owner = App.Current.MainWindow;
dlgview.ShowDialog();
dlg = null;
return dlgCanNullResult;
}
public static bool? CanNullShow(string text, string title, string btncontent)
{
dlg = new Dlg();
dlgview = new Dialog();
dlg.content = text;
dlg.title = title;
dlg.showNoCancel = dlg.showCancel = Visibility.Visible;
dlg.iconUri = dlg.SetIconUri(DlgIcon.Question);
string[] bc = btncontent.Split('|');
dlgview.OkOrYes.Content = bc[0];
dlgview.NoOrCancel.Content = bc[1];
dlgview.Cancel.Content = bc[2];
dlgview.DataContext = dlg;
dlgview.Icon = BitmapFrame.Create(dlg.iconUri);
dlgview.Owner = App.Current.MainWindow;
dlgview.ShowDialog();
dlg = null;
return dlgCanNullResult;
}
public static bool? CanNullShow(string text, string title, string btncontent, DlgIcon icontype)
{
dlg = new Dlg();
dlgview = new Dialog();
dlg.content = text;
dlg.title = title;
dlg.showNoCancel = dlg.showCancel = Visibility.Visible;
dlg.iconUri = dlg.SetIconUri(icontype);
string[] bc = btncontent.Split('|');
dlgview.OkOrYes.Content = bc[0];
dlgview.NoOrCancel.Content = bc[1];
dlgview.Cancel.Content = bc[2];
dlgview.DataContext = dlg;
dlgview.Icon = BitmapFrame.Create(dlg.iconUri);
dlgview.Owner = App.Current.MainWindow;
dlgview.ShowDialog();
dlg = null;
return dlgCanNullResult;
}
}
public enum DlgBtn
{
ok,
yesno,
okcancel
//yesnocancel
}
public enum DlgIcon
{
Asterisk,
Error,
Exclamation,
Hand,
Information,
None,
Question,
Stop,
Warning
}
}
<Window x:Class="MvvmDlg.Dialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:ignore="http://www.galasoft.ch/ignore"
Title="{Binding Title}"
mc:Ignorable="d ignore" Width="388" Height="238" ResizeMode="NoResize"
WindowStartupLocation="CenterScreen" Background="AliceBlue">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="7*"/>
<RowDefinition Height="6"/>
<RowDefinition Height="2*"/>
</Grid.RowDefinitions>
<StackPanel Orientation="Vertical">
<Rectangle Fill="Purple" Height="6" Stroke="Purple" Margin="0,5,158,0"/>
<TextBlock Text="{Binding Content}" FontSize="16" TextWrapping="Wrap" Margin="28,18"/>
</StackPanel>
<StackPanel Grid.Row="1" Orientation="Vertical">
<Rectangle Fill="Purple" Height="1" Stroke="Purple" />
<Rectangle Fill="Purple" Height="1" Stroke="Purple" Margin="0,2,0,0" />
</StackPanel>
<StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Center" TextBlock.FontSize="12.667" Margin="98,0,0,0">
<Button Name="OkOrYes" Content="确定" Command="{Binding CloseCmd}" CommandParameter="{Binding BtnOKOrYes}" Margin="8,2,8,8" Width="60"/>
<Button Name="NoOrCancel" Content="否" Command="{Binding CloseCmd}" CommandParameter="{Binding BtnNoOrCancel}" Margin="8,2,8,8" Width="60" Visibility="{Binding ShowNoCancel}"/>
<Button Name="Cancel" Content="取消" Command="{Binding CloseCancelCmd}" Margin="8,2,8,8" Width="60" Visibility="{Binding ShowCancel}"/>
</StackPanel>
</Grid>
</Window>
Dlg.Show("用户名或密码错误!", "错误提示", DlgBtn.ok);
Dlg.Show("用户名或密码错误!", "错误提示", "aa");
Dlg.Show("用户名或密码错误!", "错误提示", "aa|bb", DlgIcon.Error);
Dlg.Show("用户名或密码错误!", "错误提示", DlgBtn.ok, DlgIcon.Error);
Dlg.Show("用户名或密码错误!", "错误提示", DlgBtn.okcancel);
Dlg.Show("用户名或密码错误!", "错误提示", DlgBtn.okcancel, DlgIcon.Error);
Dlg.CanNullShow("用户名或密码错误!", "错误提示");
Dlg.CanNullShow("用户名或密码错误!", "错误提示", "aa|bb|cc");