WPF Prism MVVM 中 弹出新窗体. 放入用户控件

这里写图片描述

WPF Prism MVVM 中 弹出新窗体. 放入用户控件., 传入一些数据,并且可以返回一些数据.

对于一个WPF MVVM 的 萌新来说. 必然会遇到一个 弹出 新窗口 的问题.
今天,就和大家分享一下,这个问题的解决方法.
.

一. 准备

  • .dll
  • .CS 文件 (StylePopupWindowAction.cs)
  • .xaml 文件(BorderlessWindow.xaml)

WPF Prism MVVM 中 弹出新窗体. 放入用户控件_第1张图片
这里是 实例化一个窗口,然后 加载窗口的样式. ( StylePopupWindowAction.cs)

using System;
using System.Windows;
using System.Windows.Input;
using Prism.Interactivity;
using Prism.Interactivity.InteractionRequest;

namespace HXDJSsYSTEM.WindowAction
{
    public class StylePopupWindowAction : PopupWindowAction
    {
       private Window _wrapperWindow;
        /// 
        /// 通过重写PopupWindowAction中的GetWindow方法,设置Window的Style属性。
        /// 否则打开的只能是默认窗体,无法设置样式。
        /// 
        /// 
        /// 
        protected override Window GetWindow(INotification notification)
        {
            if (this.WindowContent != null)
            {
                //初始化窗口
                _wrapperWindow = new Window
                {
                    //数据上下文
                    DataContext = notification,
                    Title = notification.Title,
                    //宽高自适应 内容
                    SizeToContent = SizeToContent.WidthAndHeight,
                  
                };

                _wrapperWindow.KeyDown += WrapperWindow_KeyDown;
                ResourceDictionary langRd = null;
                try
                {
                    //读取资源文件(样式)
                    langRd = Application.LoadComponent(new Uri("/WindowAction/BorderlessWindow.xaml", UriKind.RelativeOrAbsolute)) as ResourceDictionary;
                }
                catch
                {
                }
                //判断资源是否 读取成功.读取成功则不为null
                if (langRd != null)
                {
                    //判断是否已经有资源. 如果有 就 clear;
                    if (_wrapperWindow.Resources.MergedDictionaries.Count > 0)
                    {
                        _wrapperWindow.Resources.MergedDictionaries.Clear();
                    }
                    //将资源加入到window中
                    _wrapperWindow.Resources.MergedDictionaries.Add(langRd);
                }
                //将传入的 notification  放入 window
                PrepareContentForWindow(notification, _wrapperWindow);
            }
            else
            {
                //如果WindowContent 等于null  则 生成默认窗口
                _wrapperWindow = this.CreateDefaultWindow(notification);
            }

            return _wrapperWindow;
        }

        /// 
        /// 键盘按下 事件
        /// 
        /// 
        /// 
        private void WrapperWindow_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            //按下ESC 关闭窗口
            if (e.Key == Key.Escape)
            {
              _wrapperWindow.Close();
            }

        }
    }
}

这里是上面代码 要加载的 样式 ( BorderlessWindow.xaml )


    
    #ffffff

    
    
    
    
    
    
    
    
    
    

    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

    
    
    

    
    
    
    
    
    
    

    
    
    
    
    
    
    

    
    
    
    

    
    
    

    
    
    
    
    
    
    
    
    
    

    

    

    
    
    
    
    
    
    
    

    

    
    
    
    
    
    
    
    
    
    
    
    
    
    

    
    
    

    
    
    
    
        
        
        
    
    
    

    

二. 我们该怎么用它.

1.窗口的XAML
这里我们需要用到Triggers
WPF Prism MVVM 中 弹出新窗体. 放入用户控件_第2张图片

2.窗口的 ViewModel
在这里我们需要引用命名空间 ,大家没有这个DLL的 可以在NuGet上搜索.安装就可以了.
WPF Prism MVVM 中 弹出新窗体. 放入用户控件_第3张图片

3.这里是ViewModel的具体方法

  • 定义
  • 在构造参数中实例化
  • 传入Content和Title

WPF Prism MVVM 中 弹出新窗体. 放入用户控件_第4张图片

4.要放入Window 中 的 用户控件 的ViewModel

WPF Prism MVVM 中 弹出新窗体. 放入用户控件_第5张图片

5.用户控件的ViewModel 中的具体操作

  • 放入返回值
  • 关闭窗口

WPF Prism MVVM 中 弹出新窗体. 放入用户控件_第6张图片

6.返回值的处理
WPF Prism MVVM 中 弹出新窗体. 放入用户控件_第7张图片

注意:

  • 用户控件 在触发器那里指定的时候,要注意 防止出现死循环. 会报错…
  • 这只是其中一种解决方案… 可能不是最好的.

这些就是 这个 弹出窗体的 具体操作了. 也比较简单. 看不懂的 多看两遍. 然后 动手操作一下.

WPF Prism MVVM 中 弹出新窗体. 放入用户控件_第8张图片

转载于:https://www.cnblogs.com/xxxxue/p/11153616.html

你可能感兴趣的:(WPF Prism MVVM 中 弹出新窗体. 放入用户控件)