2017-10-04 40 views
-2

请帮助我,我遇到了问题。我是UWP编码新手 问题:我已经构建了一个由按钮组成的简单应用程序。当按下按钮,它会显示一个消息UWP中的消息框不起作用

错误:无法找到模块CommonLanguageRuntimeLibrary typre System.Collections.CollectionBase

这里是我的代码

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

回答

3

有一个在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(); 
     } 
    } 
} 
+0

mm8这不适合我。 相反,我已经想出了新的错误CS4036 错误: \t“IAsyncOperation ”不包含“GetAwaiter”,没有扩展方法“GetAwaiter”接受一个类型的第一个参数“IAsyncOperation ”的定义可以发现(你是否错过了'System'的使用指令?) –

+0

只需在顶部添加'using System;'。我编辑了我的答案。 – mm8

+0

我建议大家下面使用我的方法。它允许您轻松创建或传递新按钮! – BluDay

0

我强烈建议你使用一个单独的,功能显示PO小狗消息。

UWP使用命名空间Windows.UI.Popups而不是System.Windows.MessageBox,因为它只是用来为Win32或WinForms的应用

这里是显示您所需的信息的好方法:

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

通过这种方式,可以显示消息对话框,带或不带有包含按钮的子阵列的对象数组。这种方法非常有效。如果你喜欢这个,请确保你完全理解它!