首页 > 其他分享 >WPF 自定义对话框

WPF 自定义对话框

时间:2024-08-02 10:40:52浏览次数:11  
标签:CustomMessageBoxResult 自定义 对话框 Visibility CustomMessageBoxButton msg WPF public 

<Window x:Class="WPFDemo2.窗体.CustomDialogWindow"
        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:local="clr-namespace:WPFDemo2.窗体"
        xmlns:local2="clr-namespace:WPFDemo2"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        Title="CustomDialogWindow"
        Width="800"
        Height="450"
        AllowsTransparency="True"
        Background="Transparent"
        BorderThickness="1,0,1,1"
        ResizeMode="NoResize"
        WindowStartupLocation="CenterScreen"
        WindowStyle="None"
        mc:Ignorable="d">
    <Window.Resources>
        <Style x:Key="msgbtnStyle" TargetType="Button">
            <Setter Property="Width" Value="60" />
            <Setter Property="Height" Value="25" />
            <Setter Property="Margin" Value="10,0,15,0" />
        </Style>
    </Window.Resources>
    <Grid Background="Transparent" MouseLeftButtonDown="Grid_MouseLeftButtonDown">
        <Border Margin="5"
                BorderBrush="#FFA9AEB1"
                BorderThickness="2"
                CornerRadius="10">
            <Border.Effect>
                <DropShadowEffect BlurRadius="10"
                                  Direction="300"
                                  ShadowDepth="2"
                                  Color="#FFB9BDCB" />
            </Border.Effect>
            <Border.Background>
                <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
                    <GradientStop Offset="0.16" Color="#FFFBFBFB" />
                    <GradientStop Offset="0.986" Color="#FFB4D8E2" />
                </LinearGradientBrush>
            </Border.Background>
            <Grid x:Name="grid" Margin="5">
                <Grid.RowDefinitions>
                    <RowDefinition Height="30" />
                    <RowDefinition />
                    <RowDefinition Height="50" />
                </Grid.RowDefinitions>
                <Grid Grid.Row="0" Background="Transparent">
                    <Border Background="Transparent"
                            BorderBrush="#FF5FA0F1"
                            BorderThickness="0"
                            CornerRadius="5,5,0,0">
                        <Grid>
                            <TextBlock Height="25" HorizontalAlignment="Left" Text="{Binding MessageTitle}" />
                            <Image Margin="0,3,3,2"
                                   HorizontalAlignment="Right"
                                   MouseLeftButtonDown="Image_MouseLeftButtonDown"
                                   Source="../Images/Close.png" />
                        </Grid>
                    </Border>
                </Grid>
                <StackPanel Grid.Row="1" VerticalAlignment="Center" Orientation="Horizontal">
                    <Image Width="30"
                           Height="30"
                           Margin="40,20,20,20"
                           Source="{Binding ImagePath}" />
                    <TextBlock Width="280"
                               HorizontalAlignment="Left"
                               VerticalAlignment="center"
                               FontSize="12"
                               Text="{Binding MessageBoxText}"
                               TextAlignment="Left"
                               TextWrapping="WrapWithOverflow" />
                </StackPanel>
                <StackPanel Grid.Row="2" HorizontalAlignment="Right" Orientation="Horizontal">
                    <Button x:Name="OkButton"
                            Click="OkButton_Click"
                            Content="确定"
                            IsDefault="True"
                            Style="{StaticResource msgbtnStyle}"
                            Visibility="{Binding OkButtonVisibility, Mode=OneWay}" />
                    <Button x:Name="YesButton"
                            Click="YesButton_Click"
                            Content="是"
                            Style="{StaticResource msgbtnStyle}"
                            Visibility="{Binding YesButtonVisibility, Mode=oneWay}" />
                    <Button x:Name="NoButton"
                            Click="NoButton_Click"
                            Content="否"
                            Style="{StaticResource msgbtnStyle}"
                            Visibility="{Binding NoButtonVisibility, Mode=OneWay}" />
                    <Button x:Name="CancelButton"
                            Click="CancelButton_Click"
                            Content="取消"
                            Style="{StaticResource msgbtnStyle}"
                            Visibility="{Binding CancelButtonVisibility}" />
                </StackPanel>
            </Grid>
        </Border>

    </Grid>
</Window>
 public partial class CustomDialogWindow : Window
    {
        public CustomDialogWindow()
        {
            InitializeComponent();
            this.DataContext = this;
            //所有按钮不显示()
            OkButtonVisibility= Visibility.Collapsed;
            CancelButtonVisibility= Visibility.Collapsed;
            YesButtonVisibility = Visibility.Collapsed;
            NoButtonVisibility= Visibility.Collapsed;
            Result=CustomMessageBoxResult.None;
        }
        public enum CustomMessageBoxButton
        {
            OK = 1,
            OKCancel = 2,
            YesNo = 3,
            YesNoCancel = 4
        }
        public enum CustomMessageBoxResult
        {
            None = 0,//用户直接关闭消息框
            OK = 1,//用户点击了确定按钮
            Cancel = 2,//用户点击了取消按钮
            Yes = 3,//用户点击了是按钮
            No = 4//用户点击了否按钮
        }
        public enum CustomMessageBoxIcon
        {
            None = 0,
            Error = 1,
            Question = 2,
            Infomation = 3
        }
        public string MessageTitle { get; set; }
        public string MessageBoxText { get; set; }
        public string ImagePath { get; set; }
        public Visibility OkButtonVisibility { get; set; }
        public Visibility CancelButtonVisibility { get; set; }
        public Visibility YesButtonVisibility { get; set; }
        public Visibility NoButtonVisibility { get; set; }
        public CustomMessageBoxResult Result { get; set; }

        private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            this.DragMove();
        }

        private void Image_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            this.Close();
        }
        public static CustomMessageBoxResult Show(string msgText, string title, CustomMessageBoxButton msgBtn, CustomMessageBoxIcon msgIcon)
        {
            CustomDialogWindow msg = new CustomDialogWindow();
            msg.Topmost = true;
            msg.MessageBoxText = msgText;
            msg.MessageTitle = title;
            switch (msgBtn)
            {
                case CustomMessageBoxButton.OK:
                    msg.OkButtonVisibility = Visibility.Visible;
                    break;
                case CustomMessageBoxButton.OKCancel:
                    msg.OkButtonVisibility = Visibility.Visible;
                    msg.CancelButtonVisibility = Visibility.Visible;
                    break;
                case CustomMessageBoxButton.YesNo:
                    msg.YesButtonVisibility = Visibility.Visible;
                    msg.NoButtonVisibility = Visibility.Visible;
                    break;
                case CustomMessageBoxButton.YesNoCancel:
                    msg.YesButtonVisibility= Visibility.Visible;
                    msg.NoButtonVisibility = Visibility.Visible;
                    msg.CancelButtonVisibility = Visibility.Visible;
                    break;
                default:
                    msg.OkButtonVisibility = Visibility.Visible;
                    break;
            }
            switch (msgIcon)
            {
                case CustomMessageBoxIcon.Infomation:
                    msg.ImagePath = AppDomain.CurrentDomain.BaseDirectory + @"/Images/Close.png";
                    break;
                case CustomMessageBoxIcon.Error:
                    msg.ImagePath = AppDomain.CurrentDomain.BaseDirectory + @"/Images/Close.png";
                    break;
                case CustomMessageBoxIcon.Question:
                    msg.ImagePath = AppDomain.CurrentDomain.BaseDirectory + @"/Images/Close.png";
                    break;
            }
            msg.ShowDialog(); 
            return msg.Result;
        }

        private void OkButton_Click(object sender, RoutedEventArgs e)
        {
            Result = CustomMessageBoxResult.OK;
            this.Close();
        }

        private void YesButton_Click(object sender, RoutedEventArgs e)
        {
            Result = CustomMessageBoxResult.Yes;
            this.Close();
        }

        private void NoButton_Click(object sender, RoutedEventArgs e)
        {
            Result = CustomMessageBoxResult.No;
            this.Close();
        }

        private void CancelButton_Click(object sender, RoutedEventArgs e)
        {
            Result = CustomMessageBoxResult.Cancel;
            this.Close();
        }
    }
使用:
            //CustomDialogWindow.Show("主页面已加载完毕!","加载提示", CustomDialogWindow.CustomMessageBoxButton.OK, CustomDialogWindow.CustomMessageBoxIcon.Infomation);
            //CustomDialogWindow.Show("主页面已加载失败!","错误提示", CustomDialogWindow.CustomMessageBoxButton.OK, CustomDialogWindow.CustomMessageBoxIcon.Error);
            CustomDialogWindow.CustomMessageBoxResult result = CustomDialogWindow.Show("你确定已加载完毕了吗?","询问提示", CustomDialogWindow.CustomMessageBoxButton.OKCancel, CustomDialogWindow.CustomMessageBoxIcon.Question);
            if(result == CustomDialogWindow.CustomMessageBoxResult.OK)
            {
                MessageBox.Show("OK");
            }
            else
            {
                MessageBox.Show("Cancel");
            }

 

标签:CustomMessageBoxResult,自定义,对话框,Visibility,CustomMessageBoxButton,msg,WPF,public,
From: https://www.cnblogs.com/ywtssydm/p/18338196

相关文章

  • Photos框架 - 自定义媒体选择器(相册列表)
    ​​​​​​​Photos框架-自定义媒体资源选择器(数据部分)Photos框架-自定义媒体选择器(UI列表)​​​​​​​Photos框架-自定义媒体选择器(UI预览)Photos框架-自定义媒体选择器(相册列表)引言我们已经实现了媒体资源的列表选择以及媒体资源的大图预览功能,但通常一个......
  • clion 《cmake自定义静态库后,生成的exe无法运行》
    背景项目生成lib引入,在生成exe过程中无法正常运行处理办法让链接器静态链接GCC和C++标准库set(CMAKE_EXE_LINKER_FLAGS"-static-libgcc-static-libstdc++")主CMakeLists.txtcmake_minimum_required(VERSION3.28)project(speech)#编译版本set(CMAKE_CXX_STANDAR......
  • 【C#】WPF自定义Image实现图像缩放、平移
    1.xaml实现<UserControlx:Class="HalconDemo.ImageUserControl"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://sche......
  • 《深入浅出WPF》学习笔记三.x命名空间以及常见属性
    《深入浅出WPF》学习笔记三.x命名空间以及常见属性X命名空间的由来和作用xaml:是eXtensibleApplicationMarkupLanguage的英文缩写(可扩展应用程序标记语言);声明       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"使用x:Class="WpfApp10.Main......
  • wpf基础
    在WPF(WindowsPresentationFoundation)中,Style是一种强大的资源,允许你定义一组属性值,这些值可以被多个控件实例共享。使用Style可以减少重复的XAML代码,并且使得UI的一致性和可维护性得到提高。以下是一些Style的基本概念和用法:定义Style你可以在XAML中的......
  • 自定义Django后台admin
    Django后台自定义一、AdminSite1、AdminSite属性AdminSite属性属性描述site_header管理页面顶部的文字,默认是‘Django管理’site_title<title>末尾放置的文字site_url‘查看网站’链接的urlindex_title管理索引页顶部的文字index_template自定义主要......
  • Flutter 自定义画笔案例
    首先让我们来看下这张图当UI做的设计图中有这么一个元素,我想大多数人第一反应就是叫UI切图,然后直接使用Image加载,我一开始也是这么做的,毕竟省时省力省心。但是由于后面需要针对不同的状态设置不同的颜色,我不想写过多判断语句来切换图标(我目前的做法是实现一个枚举类,然后拓展该......
  • 一个wpf项目的搭建prism框架mvvm
    一个wpf项目的搭建prism框架mvvm简单prism项目:1.新建一个wpf的项目2.引入包:在nuget中,prism.DryIoc3.把空项目应用转化成Prism,把App基类Application改为PrismApplication,因为这个基类是分布类,其中app.xaml.cs基类改为PrismApplication,和xaml的标签,引入命名空间后改为<prism......
  • el-progress 自定义线状进度条右边的文字
    需要展示类似下面的效果 搜了很多slot的方式试了都不行,好像是因为我后面的文字太长了导致了换行,加上这边需要加其他的样式,最后干脆将原始的文字变成空的,自己写右边的文字加样式了<divstyle="margin:10px020px0"v-f......
  • DevExpress WPF中文教程:如何将GridControl的更改发布到数据库?
    DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。无论是Office办公软件的衍伸产品,还是以数据为中心......