带有是和否按钮的消息框

时间:2014-03-20 03:10:34

标签: c# wpf silverlight windows-phone-8 windows-phone

我正在使用Windows Phone 8,我的情况是在消息框中我正在质疑用户,因此用户必须单击是或否。

但是meseage框只有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个按钮以及按钮上的自定义文字吗?

6 个答案:

答案 0 :(得分:4)

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

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();
    }
}

}

你可以打电话给这个消息框

对于是否按钮

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

仅限Ok按钮

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

对于确定和取消按钮

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
   {
     //...
   }
}

答案 1 :(得分:1)

API仅公开确定/取消。您可以使用Coding4FunToolkit中的Coding4Fun MessagePrompt创建是/否消息:

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();

答案 2 :(得分:1)

API仅公开&#34; OK&#34;和&#34;取消&#34;。如果您需要使用不同的按钮,我担心您将不得不使用自定义消息框。

E.g。 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/

答案 3 :(得分:0)

不,MessageBox是一种密封类型。

您需要制作自己的MessageBox控件,其中包含&#34;是&#34;和&#34;不&#34;的按钮。

答案 4 :(得分:0)

另一种选择是使用XNA框架中的Guide类。有一个BeginShowMessageBox方法,您可以选择传递按钮所需的任何字符串。

按照以下链接

link 1

link 2

link 3

答案 5 :(得分:0)

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
            }