背水一战 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)!