WPF蒙板弹窗
需求与效果
由于界面设计需要,要给弹窗添加蒙板效果,在百度和google搜索了半天,竟然没有一个满意的方案,最后只能自己想办法实现了一个,原理还是比较简单的,现在分享给大家。
先看一下效果。。
实现方法
原理其实很简单,启动项目的时候,先在主窗体最根部的Grid 添加一个控件,设置好颜色和透明度,隐藏:
<Grid> <Button Content="测试弹窗" Width="50" Height="20" Click="Button_Click"/> <StackPanel x:Name="spMasking" Opacity="0.4" Background="Black" Visibility="Collapsed" /> </Grid>
在这里我用的stack panel,具体什么都没影响。黑色背景0.4透明度刚好呈现蒙板效果。
需要蒙板弹窗的时候,调用方法
public static void ShowDialog(Window owner, Window window) { StackPanel spMasking = ControlHelper.GetChildObject<StackPanel>(owner, "spMasking"); spMasking.Visibility = Visibility.Visible; window.ShowDialog(); }
需要关闭蒙板效果的时候,调用方法
public virtual void ClearMask(object sender, EventArgs e) { var owner = Application.Current.MainWindow; StackPanel spMasking = ControlHelper.GetChildObject<StackPanel>(owner, "spMasking"); spMasking.Visibility = Visibility.Collapsed; }
这样即可实现一个蒙板弹窗
有同学可能要问,这样的话,窗体最上面一行的标题,放大缩小按钮,并没有被挡住。这里,我的做法是是隐藏掉了默认的样式,自己应用Grid封装了新的自定义样式,然后应用Grid.ColumnSpan Grid.RowSpan跨列实现蒙板遮挡,如果有遇到问题的伙伴欢迎留言。
下载链接
链接:https://pan.baidu.com/s/1eS2B5ZW
密码: 2kmf
原文地址:https://www.cnblogs.com/y-yp/p/7467143.html
相关推荐
-
聊聊Socket、TCP/IP、HTTP、FTP及网络编程 C#
2019-8-30
-
Unity3D 基于ShadowMap的平滑硬阴影 C#
2019-9-8
-
Bumblebee微服务网关的部署和扩展 C#
2019-5-12
-
ASP.NET Core 3.0预览版体验 C#
2019-9-10
-
.NET Attribute在数据校验上的应用 C#
2020-6-12
-
通用查询设计思想 C#
2019-5-21
-
unity ads使用文档翻译 C#
2019-8-30
-
如何使用AWS和Azure的配置存储服务保存读取配置 C#
2019-5-5
-
多线程之Parallel类 C#
2019-5-12
-
Builder建造者模式 C#
2019-9-17