带有“是”和“否”按钮的消息框

本文关键字:消息 按钮 带有 | 更新日期: 2023-09-27 17:51:05

我在Windows Phone 8上工作,我有在消息框中询问用户的场景,所以用户必须点击是或否。

但是消息框只有OK和Cancel按钮,我不需要它。

下面是我的代码:
MessageBoxResult m = MessageBox.Show("Are you sure? This will delete all your data", "Attention!", MessageBoxButton.OKCancel);
            if (m == MessageBoxResult.Cancel)
            {
            }
            else
            {
                MessageBox.Show("Data Deleted", "Done", MessageBoxButton.OK);
            } 

我如何将此修改为YES和NO按钮?还有,我能不能有3个按钮,按钮上有自定义文本?

带有“是”和“否”按钮的消息框

您可以使用此自定义消息框

SLMessageBox.xaml

<controls:ChildWindow x:Class="SLMessageBoxEX.SLMessageBox"
                  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                  xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"
                  xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
                  xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
                  Title="SL Custom Message Box"
                  Width="320"
                  Height="150">
<controls:ChildWindow.Resources>
    <Style x:Key="TextBoxStyle" TargetType="TextBox">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="TextBox">
                    <Grid x:Name="RootElement">
                        <ScrollViewer x:Name="ContentElement"
                                      Background="{TemplateBinding Background}"
                                      BorderThickness="0"
                                      Padding="{TemplateBinding Padding}" />
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</controls:ChildWindow.Resources>
<controls:ChildWindow.Style>
    <StaticResource ResourceKey="AlertBoxStyle" />
</controls:ChildWindow.Style>
<Grid x:Name="LayoutRoot" Margin="2">
     <Grid.RowDefinitions>
        <RowDefinition Height="80" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <TextBox x:Name="txtMsg"
             Width="195"
             Margin="59,22,0,22"
             HorizontalAlignment="Left"
             VerticalAlignment="Center"
             Background="#02FFFFFF"
             BorderBrush="{x:Null}"
             Cursor="Arrow"
             FontSize="11"
             FontWeight="SemiBold"
             IsReadOnly="True"
             SelectionBackground="#FF727272"
             Style="{StaticResource TextBoxStyle}"
             Text="SysInformation Healthcare India Pvt Ltd."
             TextAlignment="Center"
             TextWrapping="Wrap" />
    <StackPanel Grid.Row="1"
                HorizontalAlignment="Center"
                Orientation="Horizontal">
        <Button x:Name="btnYes"
                Width="65"
                Height="23"
                Margin="10,0,5,0"
                Click="OKButton_Click"
                Content="Yes"
                Style="{StaticResource ButtonStyle1}" />
        <Button x:Name="btnNo"
                Width="65"
                Height="23"
                Margin="5,0,5,0"
                Click="btnNo_Click"
                Content="No"
                Style="{StaticResource ButtonStyle1}" />
        <Button x:Name="btnCancel"
                Width="65"
                Height="23"
                Margin="5,0,5,0"
                Click="CancelButton_Click"
                Content="Cancel"
                Style="{StaticResource ButtonStyle1}" />
    </StackPanel>
    <Image x:Name="imgIcon"
           Width="45"
           Height="40"
           Margin="10,20,0,20"
           HorizontalAlignment="Left"
           VerticalAlignment="Center">
        <Image.Effect>
            <DropShadowEffect Color="#FF434343" />
        </Image.Effect>
    </Image>
</Grid>

SLMessageBox.xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
namespace SLMessageBoxEX
{
public partial class SLMessageBox : ChildWindow
{
    public delegate void MessageBoxClosedDelegate(MessageBoxResult result);
    public event MessageBoxClosedDelegate OnMessageBoxClosed;
    public MessageBoxResult Result { get; set; }
    public SLMessageBox(string title, string message, MessageBoxButtons buttons,MessageBoxIcon icon)
    {
        InitializeComponent();
        this.Closed += new EventHandler(MessageBoxChildWindow_Closed);
        this.Title = title;
        this.txtMsg.Text = message;
        DisplayButtons(buttons);
        DisplayIcon(icon);
    }
    public enum MessageBoxButtons
    {
        Ok, YesNo, YesNoCancel, OkCancel
    }
    public enum MessageBoxIcon
    {
        Question, Information, Error, None, Warning, Logout, ThankYou
    }
    private void DisplayIcon(MessageBoxIcon icon)
    {
        switch (icon)
        {
            case MessageBoxIcon.Error:
                imgIcon.Source = new BitmapImage(new Uri("/SLMessageBox;component/Images/error.png", UriKind.Relative));
                break;
            case MessageBoxIcon.Information:
                imgIcon.Source = new BitmapImage(new Uri("/SLMessageBoxEX;component/Images/Information.png", UriKind.Relative));
                break;
            case MessageBoxIcon.Question:
                imgIcon.Source = new BitmapImage(new Uri("/SLMessageBoxEX;component/Images/SIHIImages/question.png", UriKind.Relative));
                break;
            case MessageBoxIcon.Warning:
                imgIcon.Source = new BitmapImage(new Uri("/SLMessageBoxEX;component/Images/warning.png", UriKind.Relative));
                break;
            case MessageBoxIcon.None:
                imgIcon.Source = new BitmapImage(new Uri("/SLMessageBox;component/Images/Information.png", UriKind.Relative));
                break;
            case MessageBoxIcon.Logout:
                imgIcon.Source = new BitmapImage(new Uri("/SLMessageBoxEX;component/Images/logout1.png", UriKind.Relative));
                break;
            case MessageBoxIcon.ThankYou:
                imgIcon.Source = new BitmapImage(new Uri("/SLMessageBoxEX;component/Images/ThankYou.png", UriKind.Relative));
                break;
        }
    }
    private void DisplayButtons(MessageBoxButtons buttons)
    {
        switch (buttons)
        {
            case MessageBoxButtons.Ok:
                btnCancel.Visibility = Visibility.Collapsed;
                btnNo.Visibility = Visibility.Collapsed;
                btnYes.Visibility = Visibility.Visible;
                btnYes.Content = "Ok";
                break;
            case MessageBoxButtons.OkCancel:
                btnCancel.Visibility = Visibility.Visible;
                btnNo.Visibility = Visibility.Collapsed;
                btnYes.Visibility = Visibility.Visible;
                btnYes.Content = "Ok";
                break;
            case MessageBoxButtons.YesNo:
                btnCancel.Visibility = Visibility.Collapsed;
                btnNo.Visibility = Visibility.Visible;
                btnYes.Visibility = Visibility.Visible;
                break;
            case MessageBoxButtons.YesNoCancel:
                btnCancel.Visibility = Visibility.Visible;
                btnNo.Visibility = Visibility.Visible;
                btnYes.Visibility = Visibility.Visible;
                break;
        }
    }
    private void MessageBoxChildWindow_Closed(object sender, EventArgs e)
    {
        if (OnMessageBoxClosed != null)
            OnMessageBoxClosed(this.Result);
    }
    private void OKButton_Click(object sender, RoutedEventArgs e)
    {
        if (btnYes.Content.ToString().ToLower().Equals("yes") == true)
        {
            //yes button
            this.Result = MessageBoxResult.Yes;
        }
        else
        {
            //ok button
            this.Result = MessageBoxResult.OK;
        }
        this.Close();
    }
    private void CancelButton_Click(object sender, RoutedEventArgs e)
    {
        this.Result = MessageBoxResult.Cancel;
        this.Close();
    }
    private void btnNo_Click(object sender, RoutedEventArgs e)
    {
        this.Result = MessageBoxResult.Cancel;
        this.Close();
    }
}

}

你可以把这个叫做Message Box

For Yes No Buttons

SLMessageBox messBox;
messBox = new SLMessageBox("Message", "Yes or No Message Box...!", SLMessageBox.MessageBoxButtons.YesNo, SLMessageBox.MessageBoxIcon.Information);
messBox.Show();

For Only For Ok Button

SLMessageBox messBox;
messBox = new SLMessageBox("Message", "Ok Message Box...!", SLMessageBox.MessageBoxButtons.Ok, SLMessageBox.MessageBoxIcon.Information);
messBox.Show();

Ok和Cancel按钮

SLMessageBox messBox;
messBox = new SLMessageBox("Message", "Ok and Cancel Message Box...!", SLMessageBox.MessageBoxButtons.OkCancel, SLMessageBox.MessageBoxIcon.Information);
messBox.Show();

编辑:为了检查MessageBox的结果用户点击了什么

SLMessageBox messBox;
messBox = new SLMessageBox("Message", "Yes, No and Cancel Buttons Message Box...!", SLMessageBox.MessageBoxButtons.YesNoCancel, , SLMessageBox.MessageBoxIcon.Information);
messBox.Show();
messBox.OnMessageBoxClosed += messBox_OnDeleteMessageBoxClosed;
private void messBox_OnDeleteMessageBoxClosed(MessageBoxResult result)
{
   if(result==MessageBoxResult.Yes)
   {
     //....
   }
   else if(result==MessageBoxResult.No)
   {
     //....
   }
   else
   {
     //...
   }
}

API只公开OK/Cancel。你可以使用Coding4FunToolkit中的Coding4Fun MessagePrompt来创建Yes/No消息:

MessagePrompt msgPrompt = new MessagePrompt();
msgPrompt.Message = "Your Message.";
Button yesBtn = new Button() { Content = "Yes" };
yesBtn.Click += new RoutedEventHandler(yesBtn_Click);
Button noBtn = new Button() { Content = "No" };
noBtn.Click += new RoutedEventHandler(noBtn_Click);
msgPrompt.ActionPopUpButtons.Add(noBtn);
msgPrompt.ActionPopUpButtons.Add(yesBtn);
msgPrompt.Show();

API只公开"OK"answers"Cancel"。如果你需要使用不同的按钮,恐怕你必须使用自定义消息框。

。http://shawnoster.com/2012/10/welcome-custommessagebox-to-the-windows-phone-toolkit/

http://blogs.microsoft.co.il/tomershamam/2010/10/19/windows-phone-7-custom-message-box/

不,MessageBox是一个密封类型。

您需要创建自己的MessageBox控件,该控件具有"Yes"answers"No"按钮。

另一个选择是使用来自XNA框架的Guide类。有一个BeginShowMessageBox方法,它给了你传递任何你想要的字符串给按钮的选项。

跟随下面的链接

链接1

链接2链接

3

if (MessageBox.Show("Are you sure?", "Attention!!", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
            {
                //this block will be executed when Yes is selected
                MessageBox.Show("Data Deleted", "Done", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            }
            else
            {
                //this block will be executed when No is selected
            }