原文:WPF Prism MVVM 中 弹出新窗体. 放入用户控件
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37214567/article/details/79657338
WPF Prism MVVM 中 弹出新窗体. 放入用户控件., 传入一些数据,并且可以返回一些数据.
对于一个WPF MVVM 的 萌新来说. 必然会遇到一个 弹出 新窗口 的问题.
今天,就和大家分享一下,这个问题的解决方法.
.
一. 准备
- .dll
- .CS 文件 (StylePopupWindowAction.cs)
- .xaml 文件(BorderlessWindow.xaml)
这里是 实例化一个窗口,然后 加载窗口的样式. ( 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;
/// <summary>
/// 通过重写PopupWindowAction中的GetWindow方法,设置Window的Style属性。
/// 否则打开的只能是默认窗体,无法设置样式。
/// </summary>
/// <param name="notification"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 键盘按下 事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void WrapperWindow_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
//按下ESC 关闭窗口
if (e.Key == Key.Escape)
{
_wrapperWindow.Close();
}
}
}
}
这里是上面代码 要加载的 样式 ( BorderlessWindow.xaml )
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style x:Name="BorderlessWindowStyle"
TargetType="{x:Type Window}">
<Setter Property="FontFamily"
Value="{DynamicResource DefaultFontFamily}" />
<Setter Property="FontSize"
Value="{DynamicResource DefaultFontSize}" />
<Setter Property="Foreground"
Value="{DynamicResource WindowText}" />
<Setter Property="BorderBrush"
Value="{DynamicResource WindowBorder}" />
<Setter Property="ResizeMode"
Value="CanResizeWithGrip" />
<Setter Property="UseLayoutRounding"
Value="True" />
<Setter Property="TextOptions.TextFormattingMode"
Value="Display" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Window}">
<Border x:Name="WindowBorder"
Margin="{Binding Source={x:Static SystemParameters.WindowNonClientFrameThickness}}">
<Border.Background>
<SolidColorBrush x:Name="WindowBorderBackground"
Color="{DynamicResource WindowBackgroundColor}" />
</Border.Background>
<Border.Resources>
<Storyboard x:Key="BackgroundAnimation">
<ColorAnimation Storyboard.TargetName="WindowBorderBackground"
Storyboard.TargetProperty="Color"
To="{DynamicResource WindowBackgroundColor}"
Duration="0:0:.6" />
</Storyboard>
</Border.Resources>
<Border BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="1">
<AdornerDecorator>
<Grid x:Name="LayoutRoot">
<Grid.RowDefinitions>
<RowDefinition Height="36" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!-- title bar -->
<Grid>
<!-- title -->
<TextBlock Text="{TemplateBinding Title}"
Margin="8,0"
VerticalAlignment="Center"
Visibility="Visible" />
<!-- window system buttons-->
<StackPanel VerticalAlignment="Top"
HorizontalAlignment="Right"
WindowChrome.IsHitTestVisibleInChrome="True">
<Button Command="{Binding Source={x:Static SystemCommands.CloseWindowCommand}}"
ToolTip="关闭">
<Button.Content>
<Grid Width="13"
Height="12"
RenderTransform="1,0,0,1,0,1">
<Path Data="M0,0 L8,7 M8,0 L0,7 Z"
Width="8"
Height="7"
VerticalAlignment="Center"
HorizontalAlignment="Center"
Stroke="{Binding Foreground, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Button}}"
StrokeThickness="1.5" />
</Grid>
</Button.Content>
</Button>
</StackPanel>
</Grid>
<Grid Grid.Row="1"
Height="30">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="42" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
</Grid>
<Grid Grid.Row="2">
<ContentPresenter />
</Grid>
</Grid>
</AdornerDecorator>
</Border>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsActive"
Value="True">
<Setter Property="BorderBrush"
Value="{DynamicResource WindowBorderActive}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="WindowChrome.WindowChrome">
<Setter.Value>
<WindowChrome CornerRadius="0"
GlassFrameThickness="1"
UseAeroCaptionButtons="False"
NonClientFrameEdges="None" />
</Setter.Value>
</Setter>
</Style>
<Color x:Key="WindowBackgroundColor">#ffffff</Color>
<SolidColorBrush x:Key="ButtonBackground"
Color="#ffffff" />
<SolidColorBrush x:Key="ButtonBackgroundHover"
Color="#dddddd" />
<SolidColorBrush x:Key="ButtonBackgroundPressed"
Color="BlueViolet" />
<SolidColorBrush x:Key="ButtonBorder"
Color="#cccccc" />
<SolidColorBrush x:Key="ButtonBorderHover"
Color="#cccccc" />
<SolidColorBrush x:Key="ButtonBorderPressed"
Color="BlueViolet" />
<SolidColorBrush x:Key="ButtonText"
Color="#333333" />
<SolidColorBrush x:Key="ButtonTextHover"
Color="#333333" />
<SolidColorBrush x:Key="ButtonTextPressed"
Color="#ffffff" />
<SolidColorBrush x:Key="ButtonTextDisabled"
Color="#a1a1a1" />
<SolidColorBrush x:Key="DataGridBackground"
Color="Transparent" />
<SolidColorBrush x:Key="DataGridForeground"
Color="#333333" />
<SolidColorBrush x:Key="DataGridCellBackground"
Color="Transparent" />
<SolidColorBrush x:Key="DataGridCellBackgroundHover"
Color="#dddddd" />
<SolidColorBrush x:Key="DataGridCellBackgroundSelected"
Color="BlueViolet" />
<SolidColorBrush x:Key="DataGridCellForeground"
Color="#333333" />
<SolidColorBrush x:Key="DataGridCellForegroundHover"
Color="#333333" />
<SolidColorBrush x:Key="DataGridCellForegroundSelected"
Color="#ffffff" />
<SolidColorBrush x:Key="DataGridHeaderBackground"
Color="Transparent" />
<SolidColorBrush x:Key="DataGridHeaderBackgroundHover"
Color="#dddddd" />
<SolidColorBrush x:Key="DataGridHeaderBackgroundPressed"
Color="BlueViolet" />
<SolidColorBrush x:Key="DataGridHeaderBackgroundSelected"
Color="BlueViolet" />
<SolidColorBrush x:Key="DataGridHeaderForeground"
Color="#333333" />
<SolidColorBrush x:Key="DataGridHeaderForegroundHover"
Color="#333333" />
<SolidColorBrush x:Key="DataGridHeaderForegroundPressed"
Color="#ffffff" />
<SolidColorBrush x:Key="DataGridHeaderForegroundSelected"
Color="#ffffff" />
<SolidColorBrush x:Key="DataGridGridLines"
Color="#cccccc" />
<SolidColorBrush x:Key="DataGridDropSeparator"
Color="BlueViolet" />
<SolidColorBrush x:Key="Hyperlink"
Color="BlueViolet" />
<SolidColorBrush x:Key="HyperlinkHover"
Color="BlueViolet" />
<SolidColorBrush x:Key="HyperlinkDisabled"
Color="#919191" />
<SolidColorBrush x:Key="InputBackground"
Color="#ffffff" />
<SolidColorBrush x:Key="InputBackgroundHover"
Color="#ffffff" />
<SolidColorBrush x:Key="InputBorder"
Color="#cccccc" />
<SolidColorBrush x:Key="InputBorderHover"
Color="#cccccc" />
<SolidColorBrush x:Key="InputText"
Color="#333333" />
<SolidColorBrush x:Key="InputTextHover"
Color="#333333" />
<SolidColorBrush x:Key="InputTextDisabled"
Color="#919191" />
<SolidColorBrush x:Key="ItemBackgroundHover"
Color="#dddddd" />
<SolidColorBrush x:Key="ItemBackgroundSelected"
Color="BlueViolet" />
<SolidColorBrush x:Key="ItemBorder"
Color="#cccccc" />
<SolidColorBrush x:Key="ItemText"
Color="#333333" />
<SolidColorBrush x:Key="ItemTextSelected"
Color="#ffffff" />
<SolidColorBrush x:Key="ItemTextHover"
Color="#333333" />
<SolidColorBrush x:Key="ItemTextDisabled"
Color="#919191" />
<SolidColorBrush x:Key="LinkButtonText"
Color="#717171" />
<SolidColorBrush x:Key="LinkButtonTextHover"
Color="#333333" />
<SolidColorBrush x:Key="LinkButtonTextPressed"
Color="#919191" />
<SolidColorBrush x:Key="LinkButtonTextDisabled"
Color="#919191" />
<SolidColorBrush x:Key="MenuText"
Color="#66000000" />
<SolidColorBrush x:Key="MenuTextHover"
Color="#bb000000" />
<SolidColorBrush x:Key="MenuTextSelected"
Color="#333333" />
<SolidColorBrush x:Key="ModernButtonBorder"
Color="#919191" />
<SolidColorBrush x:Key="ModernButtonBorderHover"
Color="#333333" />
<SolidColorBrush x:Key="ModernButtonBorderPressed"
Color="#333333" />
<SolidColorBrush x:Key="ModernButtonBorderDisabled"
Color="#919191" />
<SolidColorBrush x:Key="ModernButtonIconBackgroundPressed"
Color="BlueViolet" />
<SolidColorBrush x:Key="ModernButtonIconForegroundPressed"
Color="#ffffff" />
<SolidColorBrush x:Key="ModernButtonText"
Color="#333333" />
<SolidColorBrush x:Key="ModernButtonTextHover"
Color="#333333" />
<SolidColorBrush x:Key="ModernButtonTextPressed"
Color="#333333" />
<SolidColorBrush x:Key="ModernButtonTextDisabled"
Color="#a1a1a1" />
<SolidColorBrush x:Key="PopupBackground"
Color="#ffffff" />
<SolidColorBrush x:Key="ProgressBackground"
Color="#dddddd" />
<SolidColorBrush x:Key="ScrollBarBackground"
Color="Transparent" />
<SolidColorBrush x:Key="ScrollBarThumbBackground"
Color="Transparent" />
<SolidColorBrush x:Key="ScrollBarThumbBackgroundDragging"
Color="#cccccc" />
<SolidColorBrush x:Key="ScrollBarThumbBackgroundHover"
Color="#dddddd" />
<SolidColorBrush x:Key="ScrollBarThumbBorder"
Color="#cccccc" />
<SolidColorBrush x:Key="ScrollBarThumbForeground"
Color="Transparent" />
<SolidColorBrush x:Key="ScrollBarThumbForegroundDragging"
Color="Transparent" />
<SolidColorBrush x:Key="ScrollBarThumbForegroundHover"
Color="Transparent" />
<SolidColorBrush x:Key="SeparatorBackground"
Color="#cccccc" />
<SolidColorBrush x:Key="SliderSelectionBackground"
Color="BlueViolet" />
<SolidColorBrush x:Key="SliderSelectionBorder"
Color="BlueViolet" />
<SolidColorBrush x:Key="SliderThumbBackground"
Color="#ffffff" />
<SolidColorBrush x:Key="SliderThumbBackgroundDragging"
Color="BlueViolet" />
<SolidColorBrush x:Key="SliderThumbBackgroundHover"
Color="#dddddd" />
<SolidColorBrush x:Key="SliderThumbBackgroundDisabled"
Color="#cccccc" />
<SolidColorBrush x:Key="SliderThumbBorder"
Color="#cccccc" />
<SolidColorBrush x:Key="SliderThumbBorderDragging"
Color="BlueViolet" />
<SolidColorBrush x:Key="SliderThumbBorderHover"
Color="#cccccc" />
<SolidColorBrush x:Key="SliderThumbBorderDisabled"
Color="#cccccc" />
<SolidColorBrush x:Key="SliderTrackBackground"
Color="#cccccc" />
<SolidColorBrush x:Key="SliderTrackBorder"
Color="#cccccc" />
<SolidColorBrush x:Key="SliderTick"
Color="#919191" />
<SolidColorBrush x:Key="SliderTickDisabled"
Color="#cccccc" />
<SolidColorBrush x:Key="SubMenuText"
Color="#99000000" />
<SolidColorBrush x:Key="SubMenuTextHover"
Color="#66000000" />
<SolidColorBrush x:Key="SubMenuTextSelected"
Color="#333333" />
<SolidColorBrush x:Key="WindowBackground"
Color="{StaticResource WindowBackgroundColor}" />
<SolidColorBrush x:Key="WindowBorder"
Color="BlueViolet"
Opacity=".5" />
<SolidColorBrush x:Key="WindowBorderActive"
Color="BlueViolet" />
<LinearGradientBrush x:Key="WindowHeaderGradient"
StartPoint="0, 0"
EndPoint="0, 1"
Opacity=".1">
<GradientStop Offset="0"
Color="BlueViolet" />
<GradientStop Offset=".3"
Color="BlueViolet" />
<GradientStop Offset="1"
Color="Transparent" />
</LinearGradientBrush>
<SolidColorBrush x:Key="WindowText"
Color="#333333" />
<SolidColorBrush x:Key="WindowTextReadOnly"
Color="#919191" />
<Rectangle x:Key="WindowBackgroundContent"
x:Shared="false"
Height="96"
Fill="{StaticResource WindowHeaderGradient}"
VerticalAlignment="Top" />
</ResourceDictionary>
二. 我们该怎么用它.
1.窗口的XAML
这里我们需要用到Triggers
2.窗口的 ViewModel
在这里我们需要引用命名空间 ,大家没有这个DLL的 可以在NuGet上搜索.安装就可以了.
3.这里是ViewModel的具体方法
- 定义
- 在构造参数中实例化
- 传入Content和Title
4.要放入Window 中 的 用户控件 的ViewModel
5.用户控件的ViewModel 中的具体操作
- 放入返回值
- 关闭窗口
6.返回值的处理
注意:
- 用户控件 在触发器那里指定的时候,要注意 防止出现死循环. 会报错…
- 这只是其中一种解决方案… 可能不是最好的.
这些就是 这个 弹出窗体的 具体操作了. 也比较简单. 看不懂的 多看两遍. 然后 动手操作一下.
WPF Prism MVVM 中 弹出新窗体. 放入用户控件的更多相关文章
-
在ASP.NET中动态加载内容(用户控件和模板)
在ASP.NET中动态加载内容(用户控件和模板) 要点: 1. 使用Page.ParseControl 2. 使用base.LoadControl 第一部分:加载模板 下 面是一个模板“<tab ...
-
在wpf窗体上添加用户控件
1.引用用户控件的命名控件 xmlns:my="clr-namespace:WpfApplicationDemo.Control" 2.把用户控件添加到窗体中 <my:Use ...
-
【WPF学习笔记】之如何点击“新建”按钮,在面板中加载一条条的“用户控件”的信息:动画系列之(四)
...... 承接上一系列动画三. 在主界面后台代码设置嵌套第二个用户控件. using System; using System.Collections.Generic; using System. ...
-
C#窗体程序【用户控件-窗体】委托事件
这里的自定义控件是由普通控件组合而成的.希望事件响应代码推迟到使用自定义控件的窗体里写.步骤一:新建一个用户控件,放两个按钮,Tag分别是btn1,btn2.这两个按钮的共用单击事件处理代码如下: u ...
-
C#中无边框窗体移动或拖控件移动窗体
[DllImport("user32.dll")] public static extern bool ReleaseCapture(); [DllImport("use ...
-
wpf的UserControl用户控件怎么添加到Window窗体中
转载自 http://www.cnblogs.com/shuang121/archive/2013/01/09/2853591.html 我们来新建一个用户控件UserControl1.xaml &l ...
-
无边框窗体、用户控件、Timer控件
一.无边框窗体1 最大化.最小化以及关闭按钮制作实际上就是更换点击前.指向时.点击时的图片 (1)将图片放在该文件夹的Debug中,获取图片的路径Application.StartupPath + & ...
-
jQuery UI弹出新窗体
借助jqueryUI 的Dialog 在隐藏的div中嵌入Iframe 改变iframe的路径 如果项目经常用到弹出新窗体,则利用模板,把此代码和html 放入父页面中,实现父级调用, <in ...
-
CefSharp禁止弹出新窗体,在同一窗口打开链接,或者在新Tab页打开链接,并且支持带type=";POST"; target=";_blank";的链接
说明:在同一窗口打开链接,只要稍加改造就可以实现,这里实现的是在新Tab页打开链接,并且支持带type="POST" target="_blank"的链接 gi ...
随机推荐
-
那些Android中的性能优化
性能优化是一个大的范畴,如果有人问你在Android中如何做性能优化的,也许都不知道从哪开始说起. 首先要明白的是,为什么我们的App需要优化,最显而易见的时刻:用户say,什么*,刷这么久都没反应 ...
-
武汉科技大学ACM :1010: 零起点学算法12——求2个日期之间的天数
Problem Description 水题 Input 输入2个日期,日期按照年月日,年月日之间用符号-隔开(题目包含多组数据) Output 求出这2个日期之间的天数(不包括自身),每组测试数据一 ...
-
jsp验证表单后再提交
在提交表单时,我们常常需要验证核实表单内容,若都不为空时,方能提交:若有文本框为空则不提交,并获取鼠标焦点到文本框上 ,所以我们可以利用onsubmit的方法来做,请看下面例子: <html&g ...
-
Java中定时器的使用
import java.text.SimpleDateFormat; import java.util.Date; import java.util.Timer; import java.util.T ...
-
硅谷创业教父Paul Graham:如何获得创业idea
link:http://kb.cnblogs.com/page/165530/ 英文原文:How to Get Startup Ideas,翻译:Jason Zheng 要想获得创业 idea,请别试 ...
-
《从零玩转JavaWeb+项目实战》-系列课堂录制计划
点击试听课程 前言 很多自学编程的同学经常和我说想学一门语言自己到网上找一些教程看到一半就像背单词背到ambulance一样坚持不下去了....究其原因基本上都是:内容太多,太枯燥,专业术语听不懂,学 ...
-
Thymeleaf前后端传值 页面取值与js取值
参考: Thymeleaf前后端传值 页面取值与js取值 Thymeleaf 与 Javascript Thymeleaf教程 (十二) 标签内,js中使用表达式 目的: 后端通过Model传值到前端 ...
-
wsl ubuntu 配置c++环境
1.sudo apt-get install build-essential 更新 配置源 2.sudo apt install gcc-8 3.sudo apt install g++-8 cd ...
-
Weblogic12c 单节点安装
第一节weblogic12c 的安装 WebLogic除了包括WebLogic Server服务器之外,还包括一些围绕WebLogic的产品,习惯上我们说的WebLogic是指WebLogic S ...
-
Mouse Without Borders软件,主要功能备忘录
详细地址:https://blog.csdn.net/andylauren/article/details/64540500