[源码下载]

背水一战 Windows 10 (37) - 控件(弹出类): MessageDialog, ContentDialog

作者:webabcd

介绍
背水一战 Windows 10 之 控件(弹出类)

  • MessageDialog
  • ContentDialog

示例
1、MessageDialog 的示例
Controls/FlyoutControl/MessageDialogDemo.xaml

<Page
    x:Class="Windows10.Controls.FlyoutControl.MessageDialogDemo"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Windows10.Controls.FlyoutControl"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="Transparent">
        <StackPanel Margin="10 0 10 10">

            <TextBlock Name="lblMsg" Margin="5" />

            <Button Name="btnShowMessageDialogSimple" Margin="5" Content="弹出一个简单的 MessageDialog" Click="btnShowMessageDialogSimple_Click" />

            <Button Name="btnShowMessageDialogCustomCommand" Margin="5" Content="弹出一个自定义命令按钮的 MessageDialog" Click="btnShowMessageDialogCustomCommand_Click" />

        </StackPanel>
    </Grid>
</Page>

Controls/FlyoutControl/MessageDialogDemo.xaml.cs

/*
 * MessageDialog - 信息对话框(未继承任何类)
 *     Content - 内容
 *     Title - 标题
 *     Options - 选项(Windows.UI.Popups.MessageDialogOptions 枚举)
 *         None - 正常,默认值
 *         AcceptUserInputAfterDelay - 为避免用户误操作,弹出对话框后短时间内禁止单击命令按钮
 *     Commands - 对话框的命令栏中的命令集合,返回 IList<IUICommand> 类型的数据
 *     DefaultCommandIndex - 按“enter”键后,激发此索引位置的命令
 *     CancelCommandIndex - 按“esc”键后,激发此索引位置的命令
 *     ShowAsync() - 显示对话框,并返回用户激发的命令
 *
 * IUICommand - 命令
 *     Label - 显示的文字
 *     Id - 参数
 */

using System;
using Windows.UI.Popups;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

namespace Windows10.Controls.FlyoutControl
{
    public sealed partial class MessageDialogDemo : Page
    {
        public MessageDialogDemo()
        {
            this.InitializeComponent();
        }

        // 弹出一个简单的 MessageDialog
        private async void btnShowMessageDialogSimple_Click(object sender, RoutedEventArgs e)
        {
            MessageDialog messageDialog = new MessageDialog("内容", "标题");

            await messageDialog.ShowAsync();
        }

        // 弹出一个自定义命令按钮的 MessageDialog
        private async void btnShowMessageDialogCustomCommand_Click(object sender, RoutedEventArgs e)
        {
            MessageDialog messageDialog = new MessageDialog("内容", "标题");

            messageDialog.Commands.Add
            (
                new UICommand
                (
                    "自定义命令按钮1",
                    (command) =>
                    {
                        lblMsg.Text = string.Format("command label:{0}, id:{1}", command.Label, command.Id);
                    },
                    "param1"
                )
            );

            messageDialog.Commands.Add
            (
                new UICommand
                (
                    "自定义命令按钮2",
                    (command) =>
                    {
                        lblMsg.Text = string.Format("command label:{0}, id:{1}", command.Label, command.Id);
                    },
                    "param2"
                )
            );

            messageDialog.Commands.Add
            (
                new UICommand
                (
                    "自定义命令按钮3",
                    (command) =>
                    {
                        lblMsg.Text = string.Format("command label:{0}, id:{1}", command.Label, command.Id);
                    },
                    "param3"
                )
            );

            messageDialog.DefaultCommandIndex = ; // 按“enter”键后,激发第 1 个命令
            messageDialog.CancelCommandIndex = ; // 按“esc”键后,激发第 3 个命令
            messageDialog.Options = MessageDialogOptions.AcceptUserInputAfterDelay; // 对话框弹出后,短时间内禁止用户单击命令按钮,以防止用户的误操作

            // 显示对话框,并返回用户激发的命令
            IUICommand chosenCommand = await messageDialog.ShowAsync();

            lblMsg.Text += Environment.NewLine;
            lblMsg.Text += string.Format("result label:{0}, id:{1}", chosenCommand.Label, chosenCommand.Id);
        }
    }
}

2、ContentDialog 的示例
Controls/FlyoutControl/CustomContentDialog.xaml

<ContentDialog
    x:Class="Windows10.Controls.FlyoutControl.CustomContentDialog"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Windows10.Controls.FlyoutControl"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"

    Title="custom dialog title"
    PrimaryButtonText="primary button"
    SecondaryButtonText="secondary button"
    PrimaryButtonClick="ContentDialog_PrimaryButtonClick"
    SecondaryButtonClick="ContentDialog_SecondaryButtonClick">

    <!--以下为自定义对话框的标题-->
    <ContentDialog.TitleTemplate>
        <DataTemplate>
            <TextBlock Text="custom dialog title" Foreground="Red" />
        </DataTemplate>
    </ContentDialog.TitleTemplate>

    <!--以下为自定义对话框的内容-->
    <StackPanel VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
        <TextBox Name="email" Header="Email address"/>
        <PasswordBox  Name="password" Header="Password"/>
        <CheckBox Name="showPassword" Content="Show password"/>

        <TextBlock Name="body" TextWrapping="Wrap">
            <TextBlock.Text>
                content content content content content content content content content content content content content content
            </TextBlock.Text>
        </TextBlock>
    </StackPanel>

</ContentDialog>

Controls/FlyoutControl/CustomContentDialog.xaml.cs

/*
 * 自定义 ContentDialog
 */

using System.Threading.Tasks;
using Windows.UI.Xaml.Controls;

namespace Windows10.Controls.FlyoutControl
{
    public sealed partial class CustomContentDialog : ContentDialog
    {
        public CustomContentDialog()
        {
            this.InitializeComponent();
        }

        // 用户点击了第一个按钮
        private async void ContentDialog_PrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
        {
            // 通过 GetDeferral() 来等待长时任务,否则即使 await 了也不会等
            ContentDialogButtonClickDeferral deferral = args.GetDeferral();
            try
            {
                );
            }
            finally
            {
                // 完成异步操作
                deferral.Complete();
            }

            // 使此事件可以冒泡(当然 args.Cancel 默认就是 false)
            args.Cancel = false;
        }

        // 用户点击了第二个按钮
        private async void ContentDialog_SecondaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
        {
            // 通过 GetDeferral() 来等待长时任务,否则即使 await 了也不会等
            ContentDialogButtonClickDeferral deferral = args.GetDeferral();
            try
            {
                );
            }
            finally
            {
                // 完成异步操作
                deferral.Complete();
            }

            // 使此事件可以冒泡(当然 args.Cancel 默认就是 false)
            args.Cancel = false;
        }
    }
}

Controls/FlyoutControl/ContentDialogDemo.xaml

<Page
    x:Class="Windows10.Controls.FlyoutControl.ContentDialogDemo"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Windows10.Controls.FlyoutControl"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="Transparent">
        <StackPanel Margin="10 0 10 10">

            <Button Name="btnShowDialog" Margin="5" Content="弹出一个标准的对话框" Click="btnShowDialog_Click" />

            <Button Name="btnShowCustomDialog" Margin="5" Content="弹出一个自定义的对话框" Click="btnShowCustomDialog_Click" />

            <TextBlock Name="lblMsg" Margin="5" />

        </StackPanel>
    </Grid>
</Page>

Controls/FlyoutControl/ContentDialogDemo.xaml.cs

/*
 * ContentDialog - 内容对话框(继承自 ContentControl, 请参见 /Controls/BaseControl/ContentControlDemo/)
 *     FullSizeDesired - 是否全屏弹出对话框
 *     Title, TitleTemplate - 对话框的标题(可以自定义样式)
 *     Content, ContentTemplate - 对话框的内容(可以自定义样式)
 *     PrimaryButtonText - 对话框第一个按钮显示的文本
 *     SecondaryButtonText - 对话框第二个按钮显示的文本
 *     PrimaryButtonCommand, PrimaryButtonCommandParameter, SecondaryButtonCommand, SecondaryButtonCommandParameter - 按钮命令及命令参数
 *
 *     PrimaryButtonClick - 第一个按钮按下时触发的事件
 *     SecondaryButtonClick - 第二个按钮按下时触发的事件
 *     Closed, Closing, Opened - 顾名思义的一些事件
 *
 *     ShowAsync() - 弹出对话框
 *     Hide() - 隐藏对话框
 *
 *
 * 注意:自定义的内容对话框参见 CustomContentDialog.xaml
 */

using System;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

namespace Windows10.Controls.FlyoutControl
{
    public sealed partial class ContentDialogDemo : Page
    {
        public ContentDialogDemo()
        {
            this.InitializeComponent();
        }

        private async void btnShowDialog_Click(object sender, RoutedEventArgs e)
        {
            ContentDialog dialog = new ContentDialog()
            {
                Title = "dialog title",
                Content = "dialog content, dialog content, dialog content, dialog content, dialog content, dialog content, dialog content",
                FullSizeDesired = true,
                PrimaryButtonText = "PrimaryButton",
                SecondaryButtonText = "SecondaryButton"
            };

            dialog.PrimaryButtonClick += dialog_PrimaryButtonClick;
            dialog.SecondaryButtonClick += dialog_SecondaryButtonClick;

            // 弹出对话框,返回值为用户的选择结果
            /*
             * ContentDialogResult.Primary - 用户选择了第一个按钮
             * ContentDialogResult.Secondary - 用户选择了第二个按钮
             * ContentDialogResult.None - 用户没有选择(按了系统的“返回”按钮)
             */
            ContentDialogResult result = await dialog.ShowAsync();
            if (result == ContentDialogResult.Primary)
            {
                lblMsg.Text += "选择了第一个按钮";
                lblMsg.Text += Environment.NewLine;
            }
            else if (result == ContentDialogResult.Secondary)
            {
                lblMsg.Text += "选择了第二个按钮";
                lblMsg.Text += Environment.NewLine;
            }
            else if (result == ContentDialogResult.None)
            {
                lblMsg.Text += "没有选择按钮";
                lblMsg.Text += Environment.NewLine;
            }
        }

        void dialog_PrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
        {
            lblMsg.Text += "点击了第一个按钮";
            lblMsg.Text += Environment.NewLine;
        }

        void dialog_SecondaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
        {
            lblMsg.Text += "点击了第二个按钮";
            lblMsg.Text += Environment.NewLine;
        }

        // 弹出自定义对话框
        async private void btnShowCustomDialog_Click(object sender, RoutedEventArgs e)
        {
            // 实例化自定义对话框
            CustomContentDialog contentDialog = new CustomContentDialog();

            // 弹出对话框,返回值为用户的选择结果
            /*
             * ContentDialogResult.Primary - 用户选择了第一个按钮
             * ContentDialogResult.Secondary - 用户选择了第二个按钮
             * ContentDialogResult.None - 用户没有选择(按了系统的“返回”按钮)
             */
            ContentDialogResult result = await contentDialog.ShowAsync();
            if (result == ContentDialogResult.Primary)
            {
                lblMsg.Text += "选择了第一个按钮";
                lblMsg.Text += Environment.NewLine;
            }
            else if (result == ContentDialogResult.Secondary)
            {
                lblMsg.Text += "选择了第二个按钮";
                lblMsg.Text += Environment.NewLine;
            }
            else if (result == ContentDialogResult.None)
            {
                lblMsg.Text += "没有选择按钮";
                lblMsg.Text += Environment.NewLine;
            }
        }
    }
}

OK
[源码下载]

背水一战 Windows 10 (37) - 控件(弹出类): MessageDialog, ContentDialog的更多相关文章

  1. 背水一战 Windows 10 (32) - 控件(选择类): Selector, ComboBox

    [源码下载] 背水一战 Windows 10 (32) - 控件(选择类): Selector, ComboBox 作者:webabcd 介绍背水一战 Windows 10 之 控件(选择类) Sel ...

  2. 背水一战 Windows 10 (31) - 控件(按钮类): ButtonBase, Button, HyperlinkButton, RepeatButton, ToggleButton, AppBarButton, AppBarToggleButton

    [源码下载] 背水一战 Windows 10 (31) - 控件(按钮类): ButtonBase, Button, HyperlinkButton, RepeatButton, ToggleButt ...

  3. 背水一战 Windows 10 (62) - 控件(媒体类): InkCanvas 保存和加载, 手写识别

    [源码下载] 背水一战 Windows 10 (62) - 控件(媒体类): InkCanvas 保存和加载, 手写识别 作者:webabcd 介绍背水一战 Windows 10 之 控件(媒体类) ...

  4. 背水一战 Windows 10 (39) - 控件(布局类): VariableSizedWrapGrid, Border, Viewbox, SplitView

    [源码下载] 背水一战 Windows 10 (39) - 控件(布局类): VariableSizedWrapGrid, Border, Viewbox, SplitView 作者:webabcd ...

  5. 背水一战 Windows 10 (40) - 控件(导航类): AppBar, CommandBar

    [源码下载] 背水一战 Windows 10 (40) - 控件(导航类): AppBar, CommandBar 作者:webabcd 介绍背水一战 Windows 10 之 控件(导航类) App ...

  6. 背水一战 Windows 10 (42) - 控件(导航类): Frame 动画

    [源码下载] 背水一战 Windows 10 (42) - 控件(导航类): Frame 动画 作者:webabcd 介绍背水一战 Windows 10 之 控件(导航类) Frame 动画 示例An ...

  7. 背水一战 Windows 10 (44) - 控件(日期类): CalendarView, DatePicker, TimePicker

    [源码下载] 背水一战 Windows 10 (44) - 控件(日期类): CalendarView, DatePicker, TimePicker 作者:webabcd 介绍背水一战 Window ...

  8. 背水一战 Windows 10 (59) - 控件(媒体类): Image, MediaElement

    [源码下载] 背水一战 Windows 10 (59) - 控件(媒体类): Image, MediaElement 作者:webabcd 介绍背水一战 Windows 10 之 控件(媒体类) Im ...

  9. 背水一战 Windows 10 (61) - 控件(媒体类): InkCanvas 涂鸦编辑

    [源码下载] 背水一战 Windows 10 (61) - 控件(媒体类): InkCanvas 涂鸦编辑 作者:webabcd 介绍背水一战 Windows 10 之 控件(媒体类) InkCanv ...

随机推荐

  1. 免费开源的DotNet任务调度组件Quartz.NET(.NET组件介绍之五)

    很多的软件项目中都会使用到定时任务.定时轮询数据库同步,定时邮件通知等功能..NET Framework具有“内置”定时器功能,通过System.Timers.Timer类.在使用Timer类需要面对 ...

  2. 解决css样式被内置样式覆盖的问题

    .preImg { height:400px !important } <img id="preImg" class="preImg" style=&qu ...

  3. WordPress环境配置与安装

    要安装wordpress,要安装apache,php,mysql,还要进行一系列复杂的配置,较为复杂. apache安装 php5.5.6 下载链接:http://windows.php.net/do ...

  4. 常见排序算法及其java实现

    最近学习了下java,感觉java在基本语法上与C++非常相似.作为练习,我用java实现了冒泡排序.选择排序.插入排序.基尔排序.快速排序.堆排序.计数排序.合并排序. 以下为实现代码: publi ...

  5. python作用域 scope

    可以先看:http://www.cnblogs.com/youxin/p/3645734.html 几个概念:python能够改变变量作用域的代码段是def.class.lamda.if/elif/e ...

  6. java 日常学习记录

    前言:记录自己初学java 遇到的问题. 环境(win10  开始安装的IDEA,net 开发者  )学习网址:http://how2j.cn/stage/14.html (不是打广告) 特别是对初学 ...

  7. GDOI2018滚粗记

    day-50: 高中全体成员去了北京训练,我被虐成傻逼(貌似总分全校倒数第2). day-20: 回广州了,间断式略微考好55555..... day0: 早上起床好像有点晚qwq 然后简单打了个FF ...

  8. leetcode-填充同一层的兄弟节点Ⅱ

    给定一个二叉树 struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *next; } 填充它的每个 ...

  9. 浅谈 SSD,eMMC,UFS(转自知乎)

    但作为一个计算机体系结构的研究生,在这些名词满天飞的时候,我的好奇心是抑制不住的,想一探这几样技术的究竟.本文不对某一特定事件进行点评,仅从技术角度分析对比一下这三种技术.就算是当做自己的技术储备+科 ...

  10. MySQL☞insert value与values

    最近公司事情太忙,作为以一挑十的测试,只能苦逼的累死累活的.好不容易临近上线,可以偷个懒写个文章. 简单的说说如何向表中插入数据: 1.向表中所有的列插入数据(插入多行数据): insert  int ...