zoukankan      html  css  js  c++  java
  • 背水一战 Windows 10 (37)

    [源码下载]


    背水一战 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 = 0; // 按“enter”键后,激发第 1 个命令
                messageDialog.CancelCommandIndex = 2; // 按“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
                {
                    await Task.Delay(1);
                }
                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
                {
                    await Task.Delay(1);
                }
                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
    [源码下载]

  • 相关阅读:
    三种空格unicode(u00A0,u0020,u3000)表示的区别
    python调用C++之pybind11入门(相互调用)
    基于go手动写个转发代理服务
    git rebase VS git merge
    外挂
    C#本地修改器
    C# 人工智能开源库生物特征
    深层信念网络
    ASP.NET CORE(C#)与Spring Boot MVC(JAVA)
    Net UI Spy工具:ManagedSpy
  • 原文地址:https://www.cnblogs.com/webabcd/p/5915058.html
Copyright © 2011-2022 走看看