【问题标题】:MessageDialog in c# wpfc# wpf中的MessageDialog
【发布时间】:2017-01-25 12:58:50
【问题描述】:

我买了《Heads up c#》一书。我使用的是 Windows 10 和 VS 2015,所以只有 WPF,但本书是为 XAML 设计的...

第 11 章需要这些命名空间:使用 Windows.System、Windows.Storage、Windows.UI.Popups 但我在 WPF 中找不到它们,它们用于:MessageDialog、UIcommand、IStorageFile、FileOpenPicker,有没有办法添加他们到 WPF 项目?

//编辑 感谢您的帮助,我已经为 UWP 修补了 VS,它可以工作。 但现在我的问题是: 页面大小设置为 800x600,这些是列:

 <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition/>
            <RowDefinition Height="Auto"/>
 </Grid.RowDefinitions>

标题在第一行,内容在第二行,按钮(保存,加载)在第三行,看起来像网格它不存在:

Thats with normal size

After size change

在 WPF 中它起作用了;/

【问题讨论】:

    标签: c# wpf xaml namespaces


    【解决方案1】:

    对于异步对话框试试这个:

    using System.Threading.Tasks;
    using System;
    using System.Windows;
    
    // 1. call method with message window
    ShowMyDialogWindow();
    
    // 2. use async and await with Task, create your message window here.
    public async void ShowMyDialogWindow()
    {
        MessageBoxResult result= await Task.Run(() => MessageBox.Show("Arre you happy?", 
            "My window name", MessageBoxButton.YesNoCancel));
            switch (result)
            {
                case MessageBoxResult.None:
                    break;
                case MessageBoxResult.Yes:
                    // do something
                    break;
                case MessageBoxResult.No:
                    // do something
                    break;
                default:
                    break;
            }
        // This line will be executed after windows closed you can use it for 
        // something (close resource, stop timer ...)
        DoSomeThingHereToo();
    }
    
    // message window do not block your app, app will running other task.
    

    【讨论】:

      【解决方案2】:

      Angelin N. 是正确的,这些类在 WPF 中不可用(至少在没有重大黑客攻击的情况下不会)。你需要创建一个 UWP 项目来运行那本书中的示例,听起来很像。

      不过,您正在寻找的大部分内容确实存在于 WPF 中。在 UWP 中您可以做的事情确实很少,而您在 WPF 中无法做到。例如,System.Windows.MessageBox 为您提供消息框。 System.IO.File 让您可以访问所有文件 IO(相当于 IStorageFile)。文件选择器可通过Microsoft.Win32.FileDialog 获得。这两个平台之间有许多等价物。

      如果您希望为 Windows 7 制作应用程序,则需要使用 WPF。但是,如果您对仅在 Windows 10 或更高版本上运行的应用感到满意,那么 UWP 可能是最好的。

      【讨论】:

      • 我需要它们的原因主要是异步对话框,我尝试使用 MessageBox.show() 进行异步,但没有成功。
      • 你能更清楚你想要做什么吗?在 WPF 中异步编程绝对是可能的。您通常需要使用 Dispatcher 对象。例如,Dispatcher.InvokeAsync 可以让您以异步方式执行几乎任何类型的操作,包括 ShowDialog。
      【解决方案3】:

      就我而言,这些类仅适用于通用 Windows 平台。您可以尝试创建 UWP 应用,或者您需要的是 WPF?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-07-26
        • 2018-04-04
        • 1970-01-01
        • 2021-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多