WPF在控件里面嵌套WPF窗体

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF在控件里面嵌套WPF窗体相关的知识,希望对你有一定的参考价值。

各位大家好,我想用WPF制作如下的窗体

窗体要求已经在图上标明了。

主要问题是我想在WPF里面在添加一个WPF窗体,可是在网上找了很久的资料没找着,请各位帮帮忙呀。
如果能达到WPF里面用一控件再添加一个WPF窗体的话分就给了。如果能达到图片上的全部要求的话另加高分。
一定要是在WPF里面添加WPF窗体。
还有一般做成这种窗体的格式都是用什么去做的啊?

还有如果有谁能提供一些相关资料的另加分,如果有视频的话那就更好了。拜托各位了。
有谁有这方面比较厉害的,能否收小弟为徒!

另有WPF自定义控件的视频的还可加分。在此感谢各位了。
如有什么不方便的,可加小弟扣扣。

希望能详细的向小弟详解一番。
小弟扣扣:!!(*)*@%$*,(这个是按住shfit 键的,去掉shift键即可)资料可邮箱给我。

先谢过了!

明确告诉你你的思路是错误的。

WPF中Window类是不允许作为子元素存在的,所以说窗体中嵌套窗体是不可能实现的。

你学习一下以下内容(MVVM,DataTemplate),你应该就会做了。追问

那一般像WinForm有MDI完全可以实现子窗体, WPF用什么方法呢?一定要自定义控件吗?

如果是一定要自定义控件的话能否给我一些自定义的参考资料。我还没用过自定义的呢!

这个是我们老师要求我们做的,  功能都可以实现,  但是关于嵌套窗体布局还是不会。 

追答

这里有WPF实现MDI窗口的方法,原理是用的Win API方式实现的:
http://www.cnblogs.com/luluping/archive/2012/02/01/2335127.html

虽然我不明白你们老师的用意,但可以肯定的是,如果是用WPF框架,那么MDI不是优选,WPF的核心是MVVM和DataTemplate,如果一个WPF项目中没有用到这两个东西,那么也就没有选择WPF的必要了。

这里有篇文章介绍 DataTemplate 的,你参考一下:
http://www.cnblogs.com/zhouyinhui/archive/2007/03/30/694388.html

如果是用 DataTemplate实现MDI的话,基本原理如下:

MDI窗体用一个ContentControl表示,然后针对每个子窗体设计一个自定义的类型,再为这些类型设计不同的DataTemplate。当将某个子窗体对象赋值给ContentControl控件的Content属性后,ContentControl控件会自动的将界面按照对应的DataTemplate显示并绑定数据。

你的导航只需要切换ContentControl中Content属性的赋值即可。

参考技术A 如果你把子窗体换成用户控件,那么你的问题就迎刃而解了。可以把红线框住的部分用一个Border替代,然后创建一个用户控件,把红框的内部放到用户控件里,最后设置Border的Child属性为新的用户控件即可。追问

一定要用自定义的控件吗?   没有其它办法吗?  我有在网上查到可以嵌入Win32,但是对于直接嵌入wpf的还是没找着。   如果一定要自定义的控件的话应该怎么自定义一个和窗体功能一样的控件呢?  我主要是想实现这样的界面。

追答<Button Content="子窗体一" Grid.Column="0" HorizontalAlignment="Left" Margin="25,38,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>
<Button Content="子窗体二" Grid.Column="0" HorizontalAlignment="Left" Margin="25,89,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click_1"/>
<Border x:Name="MainContent" BorderBrush="Black" Grid.Column="1" HorizontalAlignment="Left"  VerticalAlignment="Top"/>

C#代码:

private void Button_Click(object sender, RoutedEventArgs e)

   this.MainContent.Child=new SubWinOne();

private void Button_Click_1(object sender, RoutedEventArgs e)

   this.MainContent.Child = new SubWinTwo();
 

详细内容可查看附件。

追问

感谢你的回答,不过分只有一个人的,我采取的答案对我也有一定的帮助。不过还是感谢你的耐心解答!

参考技术B 有一个笨办法,不是嵌套。在你的子窗体打开的时候 自定义子窗口打开时的位置,而且位置可以跟随主窗体移动应该就行了。

.Net:如何在 Windows 窗体应用程序中使用 WPF 用户控件?

【中文标题】.Net:如何在 Windows 窗体应用程序中使用 WPF 用户控件?【英文标题】:.Net: How to use a WPF user control in a windows forms application? 【发布时间】:2011-02-21 09:00:00 【问题描述】:

如何在 Windows 窗体应用程序中使用 WPF 用户控件?

【问题讨论】:

这能回答你的问题吗? Put WPF control into a Windows Forms Form 【参考方案1】:

来自 MSDN:

使用ElementHost 控件放置一个 Windows 窗体上的 WPF UIElement 控件或表单。

例子:

private void Form1_Load(object sender, EventArgs e)

    // Create the ElementHost control for hosting the
    // WPF UserControl.
    ElementHost host = new ElementHost();
    host.Dock = DockStyle.Fill;

    // Create the WPF UserControl.
    HostingWpfUserControlInWf.UserControl1 uc =
        new HostingWpfUserControlInWf.UserControl1();

    // Assign the WPF UserControl to the ElementHost control's
    // Child property.
    host.Child = uc;

    // Add the ElementHost control to the form's
    // collection of child controls.
    this.Controls.Add(host);

Here 是一个很好的教程。

名为 ElementHost 的控件用于 WinForms中的WPF是什么 WindowsFormsHost 用于 WinForms WPF。在设计器中,您可以找到 这个控件在工具箱下面 “WPF 互操作性”。

【讨论】:

以上是关于WPF在控件里面嵌套WPF窗体的主要内容,如果未能解决你的问题,请参考以下文章

wpf窗体当把他最大化时里面的控件也要调整位置的大小怎么做

wpf里面类似 SplitterPanel SplitterItem 功能的控件怎么实现啊,可以拖放和停靠在窗体上

在WPF中弹出winfrom窗体怎么设置出现位置

WPF 子窗体 在 父窗体 中 打开,初学不懂,请指教

wpf中 我新开一个线程添加控件到主窗体

WPF中使用 menu控件自动生成菜单,但是到窗体变小时,菜单栏显示不全了,怎么解决