简体   繁体   English

UWP中的消息框不起作用

[英]Message box in UWP not working

Please help me, I have ran into a problem. 请帮助我,我遇到了问题。 I'm new in UWP coding problem : I have build a simple application which consists of a button. 我是UWP编码问题的新手:我已经构建了一个包含按钮的简单应用程序。 When the button is pressed it will display a message 按下按钮时将显示一条消息

Error : Cannot find typre System.Collections.CollectionBase in module CommonLanguageRuntimeLibrary 错误:在模块CommonLanguageRuntimeLibrary中找不到拼写错误的System.Collections.CollectionBase

Here is my code 这是我的代码

using System;    
using System.Collections.Generic;   
using System.IO;   
using System.Linq;   
using System.Runtime.InteropServices.WindowsRuntime;  
using Windows.Foundation;  
using Windows.Foundation.Collections;  
using Windows.UI.Xaml;  
using Windows.UI.Xaml.Controls;  
using Windows.UI.Xaml.Controls.Primitives;  
using Windows.UI.Xaml.Data;  
using Windows.UI.Xaml.Input;  
using Windows.UI.Xaml.Media;  
using Windows.UI.Xaml.Navigation;  
using System.Windows.MessageBox;  
using System.Windows.Forms;  

// The Blank Page item template is documented at     https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409

namespace App1  
{   
/// <summary>   
/// An empty page that can be used on its own or navigated to within a Frame.   
/// </summary>   
public sealed partial class MainPage : Page  
{    
    public MainPage()   
    {    
        this.InitializeComponent();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        MessageBox.Show("HI");
    }
}
}

There is no MessageBox in UWP but there is a MessageDialog : UWP中没有MessageBox ,但有一个MessageDialog

using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using Windows.UI.Popups;
using System;

namespace App1
{
    /// <summary>   
    /// An empty page that can be used on its own or navigated to within a Frame.   
    /// </summary>   
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
        }

        private async void Button_Click(object sender, RoutedEventArgs e)
        {
            var dialog = new MessageDialog("Hi!");
            await dialog.ShowAsync();
        }
    }
}

I strongly recommend you to use a separate, function to display a popup message. 我强烈建议您使用单独的功能来显示弹出消息。

UWP uses the namespace Windows.UI.Popups and not System.Windows.MessageBox , since it's only used for Win32 or WinForms applications UWP使用名称空间Windows.UI.Popups而不是System.Windows.MessageBox ,因为它仅用于Win32或WinForms应用程序

Here's a good way to display your desired message: 这是显示所需消息的好方法:

// Other namespaces (essential)
...

// Required namespaces for this process
using Windows.UI.Popups;
using System.Runtime.InteropServices;

namespace PopupMessageApp
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
        }

        // I will only comment those that are not obvious to comprehend.
        private async void ShowMessage(string title, string content, [Optional] object[][] buttons)
        {
            MessageDialog dialog = new MessageDialog(content, title);

            // Sets the default cancel and default indexes to zero. (incase no buttons are passed)
            dialog.CancelCommandIndex   = 0;
            dialog.DefaultCommandIndex  = 0;

            // If the optional buttons array is not empty or null.
            if (buttons != null)
            {
                // If there's multiple buttons
                if (buttons.Length > 1)
                {
                    // Loops through the given buttons array
                    for (Int32 i = 0; i < buttons.Length; i++)
                    {
                        /* Assigns text and handler variables from the current index subarray.
                         * The first object at the currentindex should be a string and 
                         * the second object should be a "UICommandInvokedHandler" 
                         */
                        string text = (string)buttons[i][0];

                        UICommandInvokedHandler handler = (UICommandInvokedHandler)buttons[i][1];

                        /* Checks whether both variables types actually are relevant and correct.
                         * If not, it will return and terminate this function and not display anything.
                         */
                        if (handler.GetType().Equals(typeof(UICommandInvokedHandler)) &&
                            text.GetType().Equals(typeof(string)))
                        {
                            /* Creates a new "UICommand" instance which is required for
                             * adding multiple buttons.
                             */
                            UICommand button = new UICommand(text, handler);

                            // Simply adds the newly created button to the dialog
                            dialog.Commands.Add(button);
                        }
                        else return;
                    }
                }
                else
                {
                    // Already described
                    string text = (string)buttons[0][0];

                    UICommandInvokedHandler handler = (UICommandInvokedHandler)buttons[0][1];

                    // Already described
                    if (handler.GetType().Equals(typeof(UICommandInvokedHandler)) &&
                        text.GetType().Equals(typeof(string)))
                    {
                        // Already described
                        UICommand button = new UICommand(text, handler);

                        // Already described
                        dialog.Commands.Add(button);
                    }
                    else return;
                }

                /* Sets the default command index to the length of the button array.
                 * The first, colored button will become the default button or index.
                 */
                dialog.DefaultCommandIndex = (UInt32)buttons.Length;
            }

            await dialog.ShowAsync();
        }

        private async void MainPage_Load(object sender, EventArgs e)
        {
            /* Single object arrays with a string object and a "UICommandInvokedHandler" handler.
             * The ShowMessage function will only use the first and second index of these arrays.
             * Replace the "return" statement with a function or whatever you desire.
             * (The "return" statemnet will just return and do nothing (obviously))
             */
            object[] button_one = { "Yes", new UICommandInvokedHandler((e) => { return; }) };
            object[] button_two = { "No", new UICommandInvokedHandler((e) => { return; }) };

            /* Object arrays within an object array.
             * The first index in this array will become the first button in the following message.
             * The first button will also get a different color and will become the default index.
             * For instance, if you press on the "enter" key, it will press on the first button.
             * You can add as many buttons as the "Windows.UI.Popups.MessageDialog" wants you to.
             */
            object[][] buttons = new object[][]
            {
                button_one,
                button_two
            };

            // Displays a popup message with multiple buttons
            ShowMessage("Title", "Content here", buttons);

            /* Displays a popup message without multiple buttons.
             * The last argument of the ShowMessage function is optional.
             * because of the definition of the namespace "System.Runtime.InteropServices".
             */
            ShowMessage("Title", "Content here");

            // PS, I have a life, just trying to get points xD // BluDay
        }
    }
}

This way, you can display a message dialog with or without passing an object array with subarrays that contains of buttons. 这样,您可以显示带有或不带有包含按钮的子数组的对象数组的消息对话框。 This method is extremely efficient. 这种方法非常有效。 If you like this, make sure you fully understand it! 如果您喜欢这样,请确保您完全理解它!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM