4

有没有办法自定义 WPF MessageBox 上的按钮,而不是“是”和“否”,我想要“输入”或“退出”或类似的东西。我搜索的所有网络都告诉它很难通过创建一个窗口来做到这一点,除了那些都是 3 或 4 岁的答案。现在有什么简单的方法可以做到吗?

4

2 回答 2

4

您可以自定义WPF Toolkit Extende MessageBox。或者您可以使用 ACB 建议的自定义WPFCustomMessageBox 。

于 2013-02-07T07:46:36.913 回答
1

我知道这是一个迟到的答案,但它可能很有用。

我需要同样的东西,我找到了这种方式,我想分享它。

我为此使用了一个窗口。

在我的窗口中,我有一个标题标签和另一个消息标签。

和三个按钮(或更多,如果需要)。

这是我的窗口:

<Window x:Class="CapronCAD.LIB.Controls.CapronMessageBox"
    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:CapronCAD.LIB.Controls"
    mc:Ignorable="d" Height="450" Width="800" WindowStyle="None" WindowStartupLocation="CenterOwner" WindowState="Minimized" ResizeMode="NoResize" ShowInTaskbar="False" AllowsTransparency="True" Background="Transparent">
<Grid x:Name="grdMessageBox" Background="#33000B4B">
    <Border BorderBrush="Black" BorderThickness="0" HorizontalAlignment="Center" Height="250" Margin="0" VerticalAlignment="Center" Width="600" Background="White" CornerRadius="5">
        <Grid>
            <Button x:Name="btnMessageBoxYes" FontWeight="SemiBold" Content="Oui" HorizontalAlignment="Right" VerticalAlignment="Bottom" Style="{DynamicResource ResourceKey=Capron_Violet_ButtonStyle}" Margin="0,0,30,30" Width="60" Click="btnMessageBoxYes_Click"/>
            <Button x:Name="btnMessageBoxNo" FontWeight="SemiBold" Content="Non" HorizontalAlignment="Right" VerticalAlignment="Bottom" Style="{DynamicResource ResourceKey=Capron_Violet_ButtonStyle}" Margin="0,0,103,30" Width="60" Background="#FFCFC9FF" Foreground="#FF6F5DF5" Click="btnMessageBoxNo_Click"/>
            <TextBlock x:Name="tbMessageBoxCaption" FontWeight="SemiBold" Margin="30,43,10,0" TextWrapping="Wrap" Text="-" VerticalAlignment="Top" FontFamily="Poppins" FontSize="14"/>
            <TextBlock x:Name="tbMessageBoxMessage" Margin="30,80,10,0" TextWrapping="Wrap" Text="-" VerticalAlignment="Top" FontFamily="Poppins"/>
            <Image x:Name="imgMessageBoxCancel" HorizontalAlignment="Right" Height="18" Margin="0,19,30,0" VerticalAlignment="Top" Width="18" Source="/CapronCAD.LIB;component/Resources/CloseBlack.png" MouseLeftButtonUp="imgMessageBoxCancel_MouseLeftButtonUp"/>
            <Button x:Name="btnMessageBoxClose" FontWeight="SemiBold" Content="Fermer" HorizontalAlignment="Center" VerticalAlignment="Bottom" Style="{DynamicResource ResourceKey=Capron_Violet_ButtonStyle}" Margin="0,0,0,30" Visibility="Collapsed" Click="btnMessageBoxClose_Click"/>
        </Grid>
    </Border>
</Grid>

这是将窗口显示为对话框的简单方法:

  internal static System.Windows.Forms.DialogResult ShowCustomMessageBox(string message, string caption = "Default caption", bool dialog = true)
    {
        Controls.CapronMessageBox mb = new Controls.CapronMessageBox(caption, message, dialog);
        mb.Topmost = true;
        mb.WindowState = WindowState.Maximized;
        mb.ShowDialog();

        
        if (mb.DialogResult == null)
            return System.Windows.Forms.DialogResult.None;
        else if (mb.DialogResult == true)
            return System.Windows.Forms.DialogResult.Yes;
        else
            return System.Windows.Forms.DialogResult.No;
    }

这是窗口后面的代码:

 public partial class CapronMessageBox: Window
{
    public CapronMessageBox(string caption, string message, bool dialog)
    {
        InitializeComponent();
        tbMessageBoxCaption.Text = caption;
        tbMessageBoxMessage.Text = message;
        if (!dialog)
        {
            btnMessageBoxClose.Visibility = Visibility.Visible;
            btnMessageBoxNo.Visibility = Visibility.Collapsed;
            btnMessageBoxYes.Visibility = Visibility.Collapsed;
        }
    }

    private void btnMessageBoxNo_Click(object sender, RoutedEventArgs e)
    {
        DialogResult = false;
    }

    private void imgMessageBoxCancel_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        this.Close();
    }

    private void btnMessageBoxYes_Click(object sender, RoutedEventArgs e)
    {
        DialogResult = true;
    }

    private void btnMessageBoxClose_Click(object sender, RoutedEventArgs e)
    {
        this.Close();
    }
}    

我怎么称呼它:

 if (UserMethods.ShowCustomMessageBox("Do you want to save changes?", "Are you sure?", false) == DialogResult.Yes)
                {
                    btnSave_Click(btnSave, null);
                }

看起来是这样的: 在此处输入图像描述

于 2021-09-06T13:58:13.370 回答