wpf的子窗体选择有很多种,如最常见的是项目新建窗体(Window)作为子窗体

,或者新建wpf用户控件(UserControl)。而其实利用Xceed.Wpf.Toolkit.dll 可以轻松布局如下:

第一步:引用Xceed.Wpf.Toolkit.dll。

第二步:在XAML引用名称空间:

   xmlns:xctk="clr-namespace:Xceed.Wpf.Toolkit.Primitives;assembly=Xceed.Wpf.Toolkit"
xmlns:wpf="clr-namespace:Xceed.Wpf.Toolkit;assembly=Xceed.Wpf.Toolkit"

第三步:布局,XAML如下:

<Window x:Class="ChildWindowDemo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:xctk="clr-namespace:Xceed.Wpf.Toolkit.Primitives;assembly=Xceed.Wpf.Toolkit"
xmlns:wpf="clr-namespace:Xceed.Wpf.Toolkit;assembly=Xceed.Wpf.Toolkit"
Title="MainWindow" Height="500" Width="700">
<Grid>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<Button Margin="5" Content="打开子窗体1" Height="40" Width="100" Click="btnOpenChildWindow1_Click"/>
<Button Margin="5" Content="打开子窗体2" Height="40" Width="100" Click="btnOpenChildWindow2_Click"/>
</StackPanel>
<xctk:WindowContainer>
<wpf:ChildWindow x:Name="childWindow1" WindowStartupLocation="Center" WindowState="Closed" Caption="子窗体1" Width="300" Height="300">
<StackPanel>
<TextBlock Text="这是子窗体1" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</StackPanel>
</wpf:ChildWindow>
<wpf:ChildWindow x:Name="childWindow2" WindowStartupLocation="Center" WindowState="Closed" Caption="子窗体2" Width="500" Height="400">
<StackPanel>
<TextBlock Text="这是子窗体2" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</StackPanel>
</wpf:ChildWindow>
</xctk:WindowContainer>
</Grid>
</Window>

C#后台代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
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.Navigation;
using System.Windows.Shapes; namespace ChildWindowDemo
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
} private void btnOpenChildWindow1_Click(object sender, RoutedEventArgs e)
{
childWindow1.IsModal = true;//设置为模态窗口
childWindow1.Show();
} private void btnOpenChildWindow2_Click(object sender, RoutedEventArgs e)
{
childWindow2.IsModal = true;
childWindow2.Show();
}
}
}

总结:有些简单的子窗体,例如要弹出一个列表窗口,而又不想去为此新建一个window,尝试使用ChildWindow,

以及用XAML绑定数据到相应的ChildWindow上,效果很不错

WPF子窗体:ChildWindow的更多相关文章

  1. WPF子窗体

    效果: 1. 点击WPF主窗体上的一个按钮,弹出子窗体, 2. 窗体最小化后,在菜单栏中点击子窗体,会连带显示它所从属的主窗体. 1. 在WPF项目中,已有主窗体MainWindow,再新建子窗体Ch ...

  2. WPF 子窗体关闭时显示父窗体

    这个问题纠结了两天,今天在一个朋友的帮助下,解决了,其实很简单,但是可能作为新手,接触WPF时间还是短,因此作为一个问题困扰了我. 父窗体部分代码 private void EditInformati ...

  3. WPF 子窗体关闭,刷新父窗体

    父窗体代码 private void DGUserEdit() { if(DGUser.SelectedItem!=null) { DataRow dr = (DGUser.SelectedItem ...

  4. wpf 子窗体调用主窗体中函数的实现

    子窗体(Win_Set): MainWindow m;                m = (MainWindow)this.Owner;                m.showText(&qu ...

  5. MvvmCross for WPF 支持子窗体显示、关闭、传参

    最近在做 PCL(Portable Class Library)平台的项目,所以发一下自己遇到的问题 MvvmCross 是 PCL 平台的一个 MVVM 框架 地址:https://github.c ...

  6. WPF 利用子线程弹出子窗体的研究

    一般来说子线程都是用来处理数据的,主窗体用来实现展现,但是有些时候我们希望子窗体实现等待效果,遮挡主窗体并使主窗体逻辑正常进行,这个业务需求虽然不多,但是正好我们用到了,于是我打算把研究成果写在这了. ...

  7. WPF 介绍一种在MVVM模式下弹出子窗体的方式

    主要是通过一个WindowManager管理类,在window后台代码中通过WindowManager注册需要弹出的窗体类型,在ViewModel通过WindowManager的Show方法,显示出来 ...

  8. WPF 在MVVM模式下弹出子窗体的方式

    主要是通过一个WindowManager管理类,在window后台代码中通过WindowManager注册需要弹出的窗体类型,在ViewModel通过WindowManager的Show方法,显示出来 ...

  9. [Prism框架实用分享]如何在主程序中合理的弹出子窗体

    大家好 说起子窗体,大家都会想到ChildWindow,多熟悉的一个控件.不错,Sliverlight中已经提供了子窗体的具体实现,而在WPF中却没有这么好的事情(有的第三方控件商已经提供此控件).最 ...

随机推荐

  1. js--事件对象的理解2

    实例1:一串跟着鼠标飞舞的div <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "h ...

  2. IIS的虚拟目录和子应用程序

    一.虚拟目录     虚拟目录是指在发布的网站下建立一个虚拟子目录,指定一个固定的物理路径做为站点的应用路径.     1. 虚拟目录与父级站点共用一个应用程序池,网站Test是在D盘下建立了的虚拟目 ...

  3. 《JS权威指南学习总结--8.6 函数闭包》

    内容要点: 和其他大多数现代编程一样,JS也采用词法作用域,也就是说,函数的执行依赖于变量作用域,这个作用域是在函数定义时决定的,而不是函数调用时决定的. 为了实现这种词法作用域,JS函数对象的内部状 ...

  4. 实现简单的手写涂鸦板(demo源码)

    在一些软件系统中,需要用到手写涂鸦的功能,然后可以将涂鸦的结果保存为图片,并可以将"真迹"通过网络发送给对方.这种手写涂鸦功能是如何实现的了?最直接的,我们可以使用Windows提 ...

  5. Linode开通新加坡机房:vps速度快,价格不变!

    vps服务商linode终于开通了新加坡机房中心,这是linode全球第7个机房,满足日益增长的东南亚市场需求.印度.中国.澳大利亚及周边国家都有很好的用户体验. linode新加坡机房采用思科Cis ...

  6. js广告图片轮播

    <div class="box"> <div class="box1"></div> <div class=" ...

  7. 极光推送 PHP sdk

    <?php defined('IN_WZ') or exit('No direct script access allowed'); /** * Created by PhpStorm. * U ...

  8. Python笔记1-20151021

    一.字符串和字符编码 字符 ASCII Unicode UTF-8 A 01000001 00000000 01000001 01000001 中 x 01001110 00101101 111001 ...

  9. php 创建文件

    $myfile = fopen("newfile.txt", "w") or die("Unable to open file!"); $t ...

  10. Hibernate中自带ID的generator的含义

    increment:代理主键,适合于所有数据库,由hibernate维护主键自增,和底层数据库无关,但是不适合于2个或以上hibernate进程. identity:代理主键,适合于Mysql或ms ...