自定义信息框 C# Wpf

7 篇文章 0 订阅
2 篇文章 0 订阅

还在用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");


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落单枫叶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值