Material Design wpf c#中的MessageBox

Abd*_*mal 2 c# wpf xaml material-design material-design-in-xaml

我在 XAML Toolkit C# 中使用 Material Design,在 Material Design WPF C# 中使用 MessageBox,

图 1

图 2

我需要这样或更好的 MessageBox 设计

我试过使用 DialogHost 但发生此错误

没有加载的 DialogHost 实例。

private async void MenuPopupButton_OnClick(object sender, RoutedEventArgs e) {
    var sampleMessageDialog = new SampleMessageDialog {
        Message = {Text = "Goodbye"}
    };

    await DialogHost.Show(sampleMessageDialog, "RootDialog");            
}
Run Code Online (Sandbox Code Playgroud)

没有加载的 DialogHost 实例。

San*_*hav 8

我在我的应用程序中开发了一个自定义消息框(使用材料设计控件)。我将向您展示 WPF XAML 和 C# 下面的代码。它包含三种类型的消息框,如下所示。


  1. 是,否

  1. 好的

  1. 好的,取消

在此处输入图片说明

WPF XAML 代码

标题

<Window x:Class="EVotingDashBoard.MessageBoxCustom"
        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"
        mc:Ignorable="d"
        Title="MessageBoxWindow" Height="220" Width="500" 
        WindowStartupLocation="CenterScreen" WindowStyle="None" Background="White" 
        ResizeMode="CanResize" Topmost="True" ShowInTaskbar="False"
        xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
        TextElement.Foreground="{DynamicResource MaterialDesignBody}"
        TextElement.FontWeight="Regular"
        TextElement.FontSize="10"
        TextOptions.TextFormattingMode="Ideal"
        TextOptions.TextRenderingMode="Auto"        
        FontFamily="{DynamicResource MaterialDesignFont}">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="197*"/>
            <ColumnDefinition Width="295*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <materialDesign:Card x:Name="cardHeader" Grid.Row="0" Padding="10" Margin="0" materialDesign:ShadowAssist.ShadowDepth="Depth5"   Background="{DynamicResource PrimaryHueDarkBrush}" Foreground="{DynamicResource PrimaryHueDarkForegroundBrush}" Visibility="Visible" Grid.ColumnSpan="2">
            <StackPanel>
                <TextBlock x:Name="txtTitle" HorizontalAlignment="Center" VerticalAlignment="Stretch" Style="{DynamicResource MaterialDesignTitleTextBlock}" FontSize="20" >Message Title</TextBlock>
            </StackPanel>
        </materialDesign:Card>
        <StackPanel  HorizontalAlignment="Right" Margin="0,5,5,0"  VerticalAlignment="Top" Grid.Column="1">
            <Button x:Name="btnClose" Click="btnClose_Click" Width="35" Height="35"  Background="White" Foreground="{DynamicResource PrimaryHueDarkBrush}" Style="{StaticResource MaterialDesignFloatingActionDarkButton}">
                <materialDesign:PackIcon Kind="Close" />
            </Button>
        </StackPanel>
        <Grid Grid.Row="1" Grid.ColumnSpan="2">
            <Grid Margin="20">
                <Grid.RowDefinitions>
                    <RowDefinition Height="auto"/>
                    <RowDefinition Height="auto"/>
                    <RowDefinition Height="*"/>
                </Grid.RowDefinitions>

                <Grid Grid.Row="0">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="auto"/>
                        <RowDefinition Height="*"/>
                    </Grid.RowDefinitions>

                    <materialDesign:TransitioningContent>
                        <materialDesign:TransitioningContent.OpeningEffects >
                            <materialDesign:TransitionEffect Kind="FadeIn" />
                            <materialDesign:TransitionEffect Kind="SlideInFromBottom" />
                        </materialDesign:TransitioningContent.OpeningEffects>
                        <TextBox x:Name="txtMessage" HorizontalAlignment="Center" IsReadOnly="True" Grid.Row="0" Margin="5" materialDesign:HintAssist.Hint="" FontSize="18" Style="{StaticResource MaterialDesignFloatingHintTextBox}" />
                    </materialDesign:TransitioningContent>

                </Grid>
                <Grid Grid.Row="1" Margin="0,20,0,5">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="auto"/>
                        <ColumnDefinition Width="auto"/>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>

                    <Button x:Name="btnOk" Click="btnOk_Click" Grid.Column="1" Style="{StaticResource MaterialDesignRaisedButton}" Margin="5" Width="100" Content="OK" ToolTip="Ok"/>
                    <Button x:Name="btnCancel" Click="btnCancel_Click" Grid.Column="2" Style="{StaticResource MaterialDesignRaisedButton}" Margin="5" Width="100" Content="Cancel" ToolTip="Cancel"/>
                    <Button x:Name="btnYes" Click="btnYes_Click" Grid.Column="1" Style="{StaticResource MaterialDesignRaisedButton}" Margin="5" Width="100" Content="Yes" ToolTip="Yes"/>
                    <Button x:Name="btnNo" Click="btnNo_Click" Grid.Column="2" Style="{StaticResource MaterialDesignRaisedButton}" Margin="5" Width="100" Content="No" ToolTip="No"/>
                </Grid>

            </Grid>
        </Grid>
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

背后的 C# 代码

 /// <summary>
    /// Interaction logic for MessageBoxCustom.xaml
    /// </summary>
    public partial class MessageBoxCustom : Window
    {
        public MessageBoxCustom(string Message, MessageType Type, MessageButtons Buttons)
        {
            InitializeComponent();
            txtMessage.Text = Message;
            switch (Type)
            {

                case MessageType.Info:
                    txtTitle.Text = "Info";
                    break;
                case MessageType.Confirmation:
                    txtTitle.Text = "Confirmation";
                    break;
                case MessageType.Success:
                    {
                        txtTitle.Text = "Success";
                    }
                    break;
                case MessageType.Warning:
                    txtTitle.Text = "Warning";
                    break;
                case MessageType.Error:
                    {   
                        txtTitle.Text = "Error";
                    }
                    break;
            }
            switch (Buttons)
            {
                case MessageButtons.OkCancel:
                    btnYes.Visibility = Visibility.Collapsed; btnNo.Visibility = Visibility.Collapsed;
                    break;
                case MessageButtons.YesNo:
                    btnOk.Visibility = Visibility.Collapsed; btnCancel.Visibility = Visibility.Collapsed;
                    break;
                case MessageButtons.Ok:
                    btnOk.Visibility = Visibility.Visible;
                    btnCancel.Visibility = Visibility.Collapsed;
                    btnYes.Visibility = Visibility.Collapsed; btnNo.Visibility = Visibility.Collapsed;
                    break;
            }
        }

        private void btnYes_Click(object sender, RoutedEventArgs e)
        {
            this.DialogResult = true;
            this.Close();
        }

        private void btnCancel_Click(object sender, RoutedEventArgs e)
        {
            this.DialogResult = false;
            this.Close();
        }

        private void btnOk_Click(object sender, RoutedEventArgs e)
        {
            this.DialogResult = true;
            this.Close();
        }

        private void btnNo_Click(object sender, RoutedEventArgs e)
        {
            this.DialogResult = false;
            this.Close();
        }

        private void btnClose_Click(object sender, RoutedEventArgs e)
        {
            this.DialogResult = false;
            this.Close();
        }
    }
    public enum MessageType
    {
        Info,
        Confirmation,
        Success,
        Warning,
        Error,
    }
    public enum MessageButtons
    {
        OkCancel,
        YesNo,
        Ok,
    }
Run Code Online (Sandbox Code Playgroud)

我们可以称之为


 private void Button_Close(object sender, RoutedEventArgs e)
 {
        bool? Result = new MessageBoxCustom("Are you sure, You want to close 
        application ?", MessageType.Confirmation, MessageButtons.YesNo).ShowDialog();

        if (Result.Value)
        {
            Application.Current.Shutdown();
        }
    }
Run Code Online (Sandbox Code Playgroud)

  • 请检查上面添加了 **ShowDialog()** 的代码。 (2认同)