当前位置:首页 > 操作系统 > Windows

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

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

[源码下载]

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


作者:webabcd

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

  • MessageDialog
  • ContentDialog


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

<span><</span><span>Page
    </span><span>x:Class</span><span>="Windows10.Controls.FlyoutControl.MessageDialogDemo"</span><span>
    xmlns</span><span>="http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span><span>
    xmlns:x</span><span>="http://schemas.microsoft.com/winfx/2006/xaml"</span><span>
    xmlns:local</span><span>="using:Windows10.Controls.FlyoutControl"</span><span>
    xmlns:d</span><span>="http://schemas.microsoft.com/expression/blend/2008"</span><span>
    xmlns:mc</span><span>="http://schemas.openxmlformats.org/markup-compatibility/2006"</span><span>
    mc:Ignorable</span><span>="d"</span><span>></span><span><</span><span>Grid </span><span>Background</span><span>="Transparent"</span><span>></span><span><</span><span>StackPanel </span><span>Margin</span><span>="10 0 10 10"</span><span>></span><span><</span><span>TextBlock </span><span>Name</span><span>="lblMsg"</span><span> Margin</span><span>="5"</span><span>/></span><span><</span><span>Button </span><span>Name</span><span>="btnShowMessageDialogSimple"</span><span> Margin</span><span>="5"</span><span> Content</span><span>="弹出一个简单的 MessageDialog"</span><span> Click</span><span>="btnShowMessageDialogSimple_Click"</span><span>/></span><span><</span><span>Button </span><span>Name</span><span>="btnShowMessageDialogCustomCommand"</span><span> Margin</span><span>="5"</span><span> Content</span><span>="弹出一个自定义命令按钮的 MessageDialog"</span><span> Click</span><span>="btnShowMessageDialogCustomCommand_Click"</span><span>/></span><span></</span><span>StackPanel</span><span>></span><span></</span><span>Grid</span><span>></span><span></</span><span>Page</span><span>></span>

Controls/FlyoutControl/MessageDialogDemo.xaml.cs

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

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

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

            </span><span>await</span><span> messageDialog.ShowAsync();
        }

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

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

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

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

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

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

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


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

<span><</span><span>ContentDialog
    </span><span>x:Class</span><span>="Windows10.Controls.FlyoutControl.CustomContentDialog"</span><span>
    xmlns</span><span>="http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span><span>
    xmlns:x</span><span>="http://schemas.microsoft.com/winfx/2006/xaml"</span><span>
    xmlns:local</span><span>="using:Windows10.Controls.FlyoutControl"</span><span>
    xmlns:d</span><span>="http://schemas.microsoft.com/expression/blend/2008"</span><span>
    xmlns:mc</span><span>="http://schemas.openxmlformats.org/markup-compatibility/2006"</span><span>
    mc:Ignorable</span><span>="d"</span><span>
    
    Title</span><span>="custom dialog title"</span><span>
    PrimaryButtonText</span><span>="primary button"</span><span>  
    SecondaryButtonText</span><span>="secondary button"</span><span>
    PrimaryButtonClick</span><span>="ContentDialog_PrimaryButtonClick"</span><span>
    SecondaryButtonClick</span><span>="ContentDialog_SecondaryButtonClick"</span><span>></span><span><!--</span><span>以下为自定义对话框的标题</span><span>--></span><span><</span><span>ContentDialog.TitleTemplate</span><span>></span><span><</span><span>DataTemplate</span><span>></span><span><</span><span>TextBlock </span><span>Text</span><span>="custom dialog title"</span><span> Foreground</span><span>="Red"</span><span>/></span><span></</span><span>DataTemplate</span><span>></span><span></</span><span>ContentDialog.TitleTemplate</span><span>></span><span><!--</span><span>以下为自定义对话框的内容</span><span>--></span><span><</span><span>StackPanel </span><span>VerticalAlignment</span><span>="Stretch"</span><span> HorizontalAlignment</span><span>="Stretch"</span><span>></span><span><</span><span>TextBox </span><span>Name</span><span>="email"</span><span> Header</span><span>="Email address"</span><span>/></span><span><</span><span>PasswordBox  </span><span>Name</span><span>="password"</span><span> Header</span><span>="Password"</span><span>/></span><span><</span><span>CheckBox </span><span>Name</span><span>="showPassword"</span><span> Content</span><span>="Show password"</span><span>/></span><span><</span><span>TextBlock </span><span>Name</span><span>="body"</span><span> TextWrapping</span><span>="Wrap"</span><span>></span><span><</span><span>TextBlock.Text</span><span>></span><span>
                content content content content content content content content content content content content content content
            </span><span></</span><span>TextBlock.Text</span><span>></span><span></</span><span>TextBlock</span><span>></span><span></</span><span>StackPanel</span><span>></span><span></</span><span>ContentDialog</span><span>></span>

Controls/FlyoutControl/CustomContentDialog.xaml.cs

<span>/*</span><span>
 * 自定义 ContentDialog
 </span><span>*/</span><span>using</span><span> System.Threading.Tasks;
</span><span>using</span><span> Windows.UI.Xaml.Controls;

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

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

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

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

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

Controls/FlyoutControl/ContentDialogDemo.xaml

<span><</span><span>Page
    </span><span>x:Class</span><span>="Windows10.Controls.FlyoutControl.ContentDialogDemo"</span><span>
    xmlns</span><span>="http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span><span>
    xmlns:x</span><span>="http://schemas.microsoft.com/winfx/2006/xaml"</span><span>
    xmlns:local</span><span>="using:Windows10.Controls.FlyoutControl"</span><span>
    xmlns:d</span><span>="http://schemas.microsoft.com/expression/blend/2008"</span><span>
    xmlns:mc</span><span>="http://schemas.openxmlformats.org/markup-compatibility/2006"</span><span>
    mc:Ignorable</span><span>="d"</span><span>></span><span><</span><span>Grid </span><span>Background</span><span>="Transparent"</span><span>></span><span><</span><span>StackPanel </span><span>Margin</span><span>="10 0 10 10"</span><span>></span><span><</span><span>Button </span><span>Name</span><span>="btnShowDialog"</span><span> Margin</span><span>="5"</span><span> Content</span><span>="弹出一个标准的对话框"</span><span> Click</span><span>="btnShowDialog_Click"</span><span>/></span><span><</span><span>Button </span><span>Name</span><span>="btnShowCustomDialog"</span><span> Margin</span><span>="5"</span><span> Content</span><span>="弹出一个自定义的对话框"</span><span> Click</span><span>="btnShowCustomDialog_Click"</span><span>/></span><span><</span><span>TextBlock </span><span>Name</span><span>="lblMsg"</span><span> Margin</span><span>="5"</span><span>/></span><span></</span><span>StackPanel</span><span>></span><span></</span><span>Grid</span><span>></span><span></</span><span>Page</span><span>></span>

Controls/FlyoutControl/ContentDialogDemo.xaml.cs

<span>/*</span><span>
 * 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
 </span><span>*/</span><span>using</span><span> System;
</span><span>using</span><span> Windows.UI.Xaml;
</span><span>using</span><span> Windows.UI.Xaml.Controls;

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

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

            dialog.PrimaryButtonClick </span>+=<span> dialog_PrimaryButtonClick;
            dialog.SecondaryButtonClick </span>+=<span> dialog_SecondaryButtonClick;

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

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

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


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

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


OK
[源码下载]

原文:http://www.cnblogs.com/lonelyxmas/p/7567356.html


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!

相关教程推荐

其他课程推荐