WPF遮罩层实现

来源:互联网 发布:cocos2d 源码 编辑:程序博客网 时间:2024/06/03 15:54

废话不多说,直接上图:
这里写图片描述

上代码:

先搞一个基类,方便子窗体复用

    public partial class BaseWindow : Window    {        public BaseWindow() : base()        {            this.Closed += Window_Closed;            this.WindowStartupLocation = WindowStartupLocation.CenterOwner;            this.ResizeMode = ResizeMode.NoResize;        }        public void SyncComplete()        {            this.Dispatcher.Invoke(() =>            {                MessageBox.Show(this, "操作完成!", "提示");            });        }        private void Window_Closed(object sender, EventArgs e)        {            //容器Grid            Grid grid = this.Owner.Content as Grid;            //父级窗体原来的内容            UIElement original = VisualTreeHelper.GetChild(grid, 0) as UIElement;            //将父级窗体原来的内容在容器Grid中移除            grid.Children.Remove(original);            //赋给父级窗体            this.Owner.Content = original;        }        public bool? ShowDialog(Window owner)        {            //蒙板            Grid layer = new Grid() { Background = new SolidColorBrush(Color.FromArgb(128, 0, 0, 0)) };            //父级窗体原来的内容            UIElement original = owner.Content as UIElement;            owner.Content = null;            //容器Grid            Grid container = new Grid();            container.Children.Add(original);//放入原来的内容            container.Children.Add(layer);//在上面放一层蒙板                                          //将装有原来内容和蒙板的容器赋给父级窗体            owner.Content = container;            this.Owner = owner;            return this.ShowDialog();        }    }

子窗体实现:
XAML

<local:BaseWindow x:Class="Modules.wnd_TimeSync"        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"        xmlns:local="clr-namespace:Modules"        mc:Ignorable="d" WindowStyle="None" AllowsTransparency="True" Background="Transparent"        Title="wnd_TimeSync" Height="20" Width="220" Closed="Window_Closed" >    <StackPanel>        <ProgressBar Name="pb" Height="20" Width="200" Maximum="100"></ProgressBar>    </StackPanel></local:BaseWindow>

cs

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;using System.Threading.Tasks;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Shapes;namespace Modules{    /// <summary>    /// wnd_TimeSync.xaml 的交互逻辑    /// </summary>    public partial class wnd_TimeSync : BaseWindow    {        public wnd_TimeSync()        {            InitializeComponent();        }        public static void ShowDialog(Window owner)        {            //弹出消息框            wnd_TimeSync box = new wnd_TimeSync();            box.ShowDialog(owner);        }    }}
原创粉丝点击