背水一战 Windows 10 (37) - 控件(弹出类): MessageDialog, ContentDialog
2021-05-13 01:26
标签:文本 reg grid oncommand targe get center 标准 space [源码下载] 作者:webabcd 示例 Controls/FlyoutControl/MessageDialogDemo.xaml.cs Controls/FlyoutControl/CustomContentDialog.xaml.cs Controls/FlyoutControl/ContentDialogDemo.xaml Controls/FlyoutControl/ContentDialogDemo.xaml.cs OK 背水一战 Windows 10 (37) - 控件(弹出类): MessageDialog, ContentDialog 标签:文本 reg grid oncommand targe get center 标准 space 原文地址:http://www.cnblogs.com/lonelyxmas/p/7567356.html
介绍
背水一战 Windows 10 之 控件(弹出类)
1、MessageDialog 的示例
Controls/FlyoutControl/MessageDialogDemo.xamlPage
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>
/*
* MessageDialog - 信息对话框(未继承任何类)
* Content - 内容
* Title - 标题
* Options - 选项(Windows.UI.Popups.MessageDialogOptions 枚举)
* None - 正常,默认值
* AcceptUserInputAfterDelay - 为避免用户误操作,弹出对话框后短时间内禁止单击命令按钮
* Commands - 对话框的命令栏中的命令集合,返回 IList
2、ContentDialog 的示例
Controls/FlyoutControl/CustomContentDialog.xamlContentDialog
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>
/*
* 自定义 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;
}
}
}
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>
/*
* 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;
}
}
}
}
[源码下载]
文章标题:背水一战 Windows 10 (37) - 控件(弹出类): MessageDialog, ContentDialog
文章链接:http://soscw.com/essay/84930.html