Is there a MessageBox equivalent in WPF?

前端 未结 9 868
耶瑟儿~
耶瑟儿~ 2020-11-29 17:49

Is there a standard message box in WPF, like WinForms\' System.Windows.Forms.MessageBox.Show(), or should I use the WinForms message box?

相关标签:
9条回答
  • 2020-11-29 18:06

    As the others say, there is a MessageBox in the WPF namespace (System.Windows).

    The problem is that it is the same old messagebox with OK, Cancel, etc. Windows Vista and Windows 7 have moved on to use Task Dialogs instead.

    Unfortunately there is no easy standard interface for task dialogs. I use an implementation from CodeProject KB.

    0 讨论(0)
  • 2020-11-29 18:07

    The WPF equivalent would be the System.Windows.MessageBox. It has a quite similar interface, but uses other enumerations for parameters and return value.

    0 讨论(0)
  • 2020-11-29 18:09

    The MessageBox in the Extended WPF Toolkit is very nice. It's at Microsoft.Windows.Controls.MessageBox after referencing the toolkit DLL. Of course this was released Aug 9 2011 so it would not have been an option for you originally. It can be found at Github for everyone out there looking around.

    0 讨论(0)
  • 2020-11-29 18:12

    WPF contains the following MessageBox:

    if (MessageBox.Show("Do you want to Save?", "Confirm", 
        MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
    {
    
    }
    
    0 讨论(0)
  • 2020-11-29 18:13

    Maybe the code here below helps:

    using Windows.UI.Popups;
    namespace something.MyViewModels
    {
        public class TestViewModel
        {
            public void aRandonMethode()
            {
                MyMessageBox("aRandomMessage");
            }
    
            public async void MyMessageBox(string mytext)
            {
                var dialog = new MessageDialog(mytext);
                await dialog.ShowAsync();
            }
        }
    }
    
    0 讨论(0)
  • 2020-11-29 18:17

    If you want to have your own nice looking wpf MessageBox: Create new Wpf Windows

    here is xaml :

    <Window x:Class="popup.MessageboxNew"
            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:local="clr-namespace:popup"
            mc:Ignorable="d"
            Title="" SizeToContent="WidthAndHeight" WindowStartupLocation="CenterScreen" WindowStyle="None" ResizeMode="NoResize" AllowsTransparency="True" Background="Transparent" Opacity="1"
            >
        <Window.Resources>
    
        </Window.Resources>
        <Border x:Name="MainBorder" Margin="10" CornerRadius="8" BorderThickness="0" BorderBrush="Black" Padding="0" >
            <Border.Effect>
                <DropShadowEffect x:Name="DSE" Color="Black" Direction="270" BlurRadius="20" ShadowDepth="3" Opacity="0.6" />
            </Border.Effect>
            <Border.Triggers>
                <EventTrigger RoutedEvent="Window.Loaded">
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetName="DSE" Storyboard.TargetProperty="ShadowDepth" From="0" To="3" Duration="0:0:1" AutoReverse="False" />
                            <DoubleAnimation Storyboard.TargetName="DSE" Storyboard.TargetProperty="BlurRadius" From="0" To="20" Duration="0:0:1" AutoReverse="False" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Border.Triggers>
            <Grid Loaded="FrameworkElement_OnLoaded">
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                </Grid.RowDefinitions>
                <Border Name="Mask" CornerRadius="8" Background="White" />
                <Grid x:Name="Grid" Background="White">
                    <Grid.OpacityMask>
                        <VisualBrush Visual="{Binding ElementName=Mask}"/>
                    </Grid.OpacityMask>
                    <StackPanel Name="StackPanel" >
                        <TextBox Style="{DynamicResource MaterialDesignTextBox}" Name="TitleBar" IsReadOnly="True" IsHitTestVisible="False" Padding="10" FontFamily="Segui" FontSize="14" 
                                 Foreground="Black" FontWeight="Normal"
                                 Background="Yellow" HorizontalAlignment="Stretch" VerticalAlignment="Center" Width="Auto" HorizontalContentAlignment="Center" BorderThickness="0"/>
                        <DockPanel Name="ContentHost" Margin="0,10,0,10" >
                            <TextBlock Margin="10" Name="Textbar"></TextBlock>
                        </DockPanel>
                        <DockPanel Name="ButtonHost" LastChildFill="False" HorizontalAlignment="Center" >
                            <Button Margin="10" Click="ButtonBase_OnClick" Width="70">Yes</Button>
                            <Button Name="noBtn" Margin="10" Click="cancel_Click" Width="70">No</Button>
                        </DockPanel>
                    </StackPanel>
                </Grid>
            </Grid>
        </Border>
    </Window>
    

    for cs of this file :

    public partial class MessageboxNew : Window
        {
            public MessageboxNew()
            {
                InitializeComponent();
                //second time show error solved
                if (Application.Current == null) new Application();
                        Application.Current.ShutdownMode = ShutdownMode.OnExplicitShutdown;
            }
    
            private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
            {
                DialogResult = true;
            }
    
            private void cancel_Click(object sender, RoutedEventArgs e)
            {
                DialogResult = false;
            }
    
            private void FrameworkElement_OnLoaded(object sender, RoutedEventArgs e)
            {
                this.MouseDown += delegate { DragMove(); };
            }
        }
    

    then create a class to use this :

    public class Mk_MessageBox
    {
        public static bool? Show(string title, string text)
        {
            MessageboxNew msg = new MessageboxNew
            {
                TitleBar = {Text = title},
                Textbar = {Text = text}
            };
            msg.noBtn.Focus();
            return msg.ShowDialog();
        }
    }
    

    now you can create your message box like this:

    var result = Mk_MessageBox.Show("Remove Alert", "This is gonna remove directory from host! Are you sure?");
                if (result == true)
                {
                    // whatever
                }
    

    copy this to App.xaml inside

    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <!-- MahApps.Metro resource dictionaries. Make sure that all file names are Case Sensitive! -->
                <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
                <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
                <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colors.xaml" />
                <!-- Accent and AppTheme setting -->
                <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Blue.xaml" />
                <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml" />
    
                <!--two new guys-->
                <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/MaterialDesignColor.LightBlue.xaml" />
                <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Accent/MaterialDesignColor.Green.xaml" />
    
                <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Light.xaml" />
                <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" />
                <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/MaterialDesignColor.DeepPurple.xaml" />
                <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Accent/MaterialDesignColor.Lime.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
    

    -------------------------------

    My Refrence : https://www.red-gate.com/simple-talk/dotnet/net-development/using-c-to-create-powershell-cmdlets-the-basics/

    for logic how can i make my own messagebox

    0 讨论(0)
提交回复
热议问题