不管什么平台,应用内难免会出现一些消息提示框,下面就来聊聊我在UWP里用到的消息提示框。

弹窗也可按是否需要用户操作促发一些逻辑进行分为两大类。

不需要用户干涉的一类:

MessageDialog:操作简单,写起来也省事,想具体了解的请参考MSDN 先看看效果

PC上效果:

mobile上效果:

再看看代码(●'◡'●)

前台:

   <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" >
<RelativePanel HorizontalAlignment="Center">
<TextBlock x:Name="tbHW" Text="Hello 弹窗" />
<TextBlock x:Name="tb" RelativePanel.Below="tbHW" Margin="0,10" FontSize="20" Foreground="#f90"/>
</RelativePanel>
<StackPanel VerticalAlignment="Bottom" Orientation="Horizontal">
<Button Content="MessageDialog" Click="Button_Click"/>
</StackPanel>
</Grid>

后台:

 private void Button_Click(object sender, RoutedEventArgs e)
{
this.tb.Text = "";
Button btn = sender as Button;
switch (btn.Content.ToString())
{
case "MessageDialog":
ShowMessageDialog();
break;
}
} private async void ShowMessageDialog()
{
var msgDialog = new Windows.UI.Popups.MessageDialog("我是一个提示内容") { Title = "提示标题" };
msgDialog.Commands.Add(new Windows.UI.Popups.UICommand("确定", uiCommand => { this.tb.Text = $"您点击了:{uiCommand.Label}"; }));
msgDialog.Commands.Add(new Windows.UI.Popups.UICommand("取消", uiCommand => { this.tb.Text = $"您点击了:{uiCommand.Label}"; }));
await msgDialog.ShowAsync();
}

很简单,但是不能控制显示位置、字体颜色、大小等,实际应用中酱紫的界面也很难说服UI妹纸。。。不要方,办法还是很多滴,下面再来介绍另外一种实现:通过Popup+UserControl来实现自己消息提示框。

还是先看效果吧。

继续来看代码:

新建一个用户控件,暂叫它MessagePopupWindow吧。

MessagePopupWindow.xaml

 <Grid>
<Border x:Name="OutBorder" Background="#55000000"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"/> <StackPanel x:Name="ContentGrid" Background="White"
Margin="45,45"
Orientation="Vertical"
VerticalAlignment="Center"> <Grid Padding="20">
<TextBlock x:Name="tbContent"
Grid.Row="0"
TextWrapping="Wrap"
HorizontalAlignment="Center" />
</Grid> <Grid Padding="15">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="15"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Button Grid.Column="0" x:Name="btnLeft"
Content="确定"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Center"
VerticalAlignment="Center"
VerticalContentAlignment="Center"
BorderThickness="0"
Click="LeftButton_Click"
Background="#f90"
Foreground="White"
MaxWidth="150"/>
<Button
Grid.Column="2"
x:Name="btnRight"
Content="取消"
Click="RightButton_Click"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Center"
VerticalAlignment="Center"
VerticalContentAlignment="Center"
BorderThickness="0"
Background="Gray"
Foreground="BlanchedAlmond"
MaxWidth="150"/>
</Grid>
</StackPanel>
</Grid>

MessagePopupWindow.xaml.cs

 public sealed partial class MessagePopupWindow : UserControl
{
private Popup m_Popup;
private string m_TextBlockContent;
private MessagePopupWindow()
{
this.InitializeComponent(); m_Popup = new Popup();
this.Width = Window.Current.Bounds.Width;
this.Height = Window.Current.Bounds.Height;
m_Popup.Child = this;
this.Loaded += MessagePopupWindow_Loaded;
this.Unloaded += MessagePopupWindow_Unloaded;
} public MessagePopupWindow(string showMsg) : this()
{
this.m_TextBlockContent = showMsg;
}
private void MessagePopupWindow_Loaded(object sender, RoutedEventArgs e)
{
this.tbContent.Text = m_TextBlockContent;
Window.Current.SizeChanged += MessagePopupWindow_SizeChanged; ;
} private void MessagePopupWindow_SizeChanged(object sender, Windows.UI.Core.WindowSizeChangedEventArgs e)
{
this.Width = e.Size.Width;
this.Height = e.Size.Height;
} private void MessagePopupWindow_Unloaded(object sender, RoutedEventArgs e)
{
Window.Current.SizeChanged -= MessagePopupWindow_SizeChanged; ;
} public void ShowWIndow()
{
m_Popup.IsOpen = true;
} private void DismissWindow()
{
m_Popup.IsOpen = false;
} private void LeftButton_Click(object sender, RoutedEventArgs e)
{
DismissWindow();
LeftClick?.Invoke(this, e);
} private void RightButton_Click(object sender, RoutedEventArgs e)
{
DismissWindow();
RightClick?.Invoke(this, e);
} public event EventHandler<RoutedEventArgs> LeftClick;
public event EventHandler<RoutedEventArgs> RightClick;
}

MainPage.xaml改动如下:

MainPage.xaml.cs在Button_Click里增加一个case来处理点击“Custom”按钮的点击事件,

case "Custom":
ShowMessagePopupWindow();
break;

ShowMessagePopupWindow方法主要如下:

 private void ShowMessagePopupWindow()
{
var msgPopup = new Controls.MessagePopupWindow("我是一个提示内容");
msgPopup.LeftClick += (s, e) => { this.tb.Text = "您点击了:确定"; };
msgPopup.RightClick += (s, e) => { this.tb.Text = "您点击了:取消"; };
msgPopup.ShowWIndow();
}

这样,一个自定义的消息提示框就完成了。。。

还有另一种不需要用户干预自己消失的提示框我们下期再约。

谢谢观赏!

UWP中的消息提示框(二)

UWP中的消息提示框(一)的更多相关文章

  1. UWP中的消息提示框(二)

    在UWP中的消息提示框(一)中介绍了一些常见的需要用户主动去干涉的一些消息提示框,接下来打算聊聊不需要用户主动去干涉的一些消息提示框.效果就是像双击退出的那种提示框. 先说说比较简单的吧,通过系统To ...

  2. 10wx.showToast消息提示框 wx.showModal模态对话框

    1==>wx.showToast 弹出层 在界面交互中 显示消息提示框 它是一个消失提示框 提示用户成功 或者失败等消息 <button size='mini' bindtap='hanl ...

  3. 自定义iOS 中推送消息 提示框

    看到标题你可能会觉得奇怪 推送消息提示框不是系统自己弹出来的吗? 为什么还要自己自定义呢? 因为项目需求是这样的:最近需要做 远程推送通知 和一个客服系统 包括店铺客服和官方客服两个模块 如果有新的消 ...

  4. Android第三方开源对话消息提示框:SweetAlertDialog(sweet-alert-dialog)

    Android第三方开源对话消息提示框:SweetAlertDialog(sweet-alert-dialog) Android第三方开源对话消息提示框:SweetAlertDialog(sweet- ...

  5. 精美舒适的对话消息提示框--第三方开源--SweetAlertDialog

    SweetAlertDialog(sweet-alert-dialog)是一个套制作精美.动画效果出色生动的Android对话.消息提示框 SweetAlertDialog(sweet-alert-d ...

  6. Android消息提示框Toast

    Android消息提示框Toast Toast是Android中一种简易的消息提示框.和Dialog不一样的是,Toast是没有焦点的,toast提示框不能被用户点击,而且Toast显示的时间有限,t ...

  7. Android开发 ---构建对话框Builder对象,消息提示框、列表对话框、单选提示框、多选提示框、日期/时间对话框、进度条对话框、自定义对话框、投影

    效果图: 1.activity_main.xml 描述: a.定义了一个消息提示框按钮 点击按钮弹出消息 b.定义了一个选择城市的输入框 点击按钮选择城市 c.定义了一个单选提示框按钮 点击按钮选择某 ...

  8. easyui 消息提示框

    1.浏览器消息提示框 浏览器弹出框,可以在浏览器设置中被屏蔽掉,导致效果失效 alert() 2.easyui 框架提供的消息框 easyui 框架自带的消息框,不可以被屏蔽. $.messager. ...

  9. wpf实现仿qq消息提示框

    原文:wpf实现仿qq消息提示框 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/huangli321456/article/details/5052 ...

随机推荐

  1. [转至云风的博客]谈谈陌陌争霸在数据库方面踩过的坑( Redis 篇)

    « 谈谈陌陌争霸在数据库方面踩过的坑(芒果篇) | 返回首页 | linode 广告时间 » 谈谈陌陌争霸在数据库方面踩过的坑( Redis 篇) 注:陌陌争霸的数据库部分我没有参与具体设计,只是参与 ...

  2. template.js小小说明

    教程 template.js 一款 JavaScript 模板引擎,简单,好用.提供一套模板语法,用户可以写一个模板区块,每次根据传入的数据,生成对应数据产生的HTML片段,渲染不同的效果. 简介 主 ...

  3. Windows Container 和 Docker

    Windows Container 和 Docker 微软在2016年的Ignite技术大会上正式发布了Windows Server 2016,其中的容器服务已经可以作为生产环境使用.这意味着Wind ...

  4. git commit 报错 There was a problem with the editor 'vi'

    今天提交代码git  commit -a的时候出现了这个错误 上网查了一下,说是Vim的返回值出错了,出错的原因还在翻译英文, 先贴出解决方案吧 git config --global core.ed ...

  5. WPF--常用布局介绍

    概述:本文简要介绍了WPF中布局常用控件及布局相关的属性 1 Canvas Canvas是一个类似于坐标系的面板,所有的元素通过设置坐标来决定其在坐标系中的位置..具体表现为使用Left.Top.Ri ...

  6. 推断(inference)、贝叶斯规则(Bayes's rule)与导出分布(derived distribution)

    1. 建模 对原始信号 X 进行观测,观测可以抽象为(离散:PY|X(y|x), 连续:fY|X(y|x)),物理世界噪声的存在,将导致观测到的 X 出现一定的噪声,记为 Y: X⇒fY|X(y|x) ...

  7. VSCode 小鸡汤 第00期 —— 安装和入门

    简介 这将是一个新的系列,将会以 Visual Studio Code(后文都简称为 VSCode 啦)的操作,环境配置,插件介绍为主,为大家不定期的介绍 VSCode 的一些操作技巧,所以取名 VS ...

  8. CMake生成OpenCV解决方案&&编译OpenCV源码

    生成OpenCV工程需要用到CMake,所以第一步需要下载CMake软件,下载链接:CMake下载 目前最新的版本是3.7.1,这里选择下载Platform下的Windows win32-x86 ZI ...

  9. matlab 矢量化编程(四)—— 标量函数转化为能够处理矢量的函数

    1. 组合的矢量实现 nchoosek(n, k) 的第二个参数在 matlab 下是不支持矢量化的,必须是标量形式.但 matlab 下的 gamma 函数,却可支持,矢量形式,又因为,gamma ...

  10. 微信小程序 获取用户信息 encryptData解密 C#版本

    最近学习小程序开发,需要对encryptData解密,获取用户信息,官方源码没有C#版本,网上的资料比较杂,有的使用还有问题,下面贴一下自己亲试可以使用的一个源码 1.code 换取 session_ ...