文档章节

wpf 窗体之间传递控件-01(未完)

浮生若梦欢几何
 浮生若梦欢几何
发布于 2016/09/23 12:07
字数 600
阅读 72
收藏 0

最近工作,编写wpf程序,遇到这样一个问题:打开一个子窗口(称为formChild,当前窗口称为formParent),并向其传送一个canvas控件(不只是canvas控件其他同理)。

解决方法00:在formChild中新建一个canvas对象,在formParent中创建该formChild的实例,并formChild.canvas = this(formParent).canvas;然后调用formChild.ShowDialog();

    结果:formChild中并没有显示canvas;解决方法00  pass;

    分析:(当时的分析,并非正确)  formChild在formParent中实例化得那一刻,就调用了InitializeComponent();所以不可能显示;

解决方法01:在方法00的基础上,在formChild构造函数中添加loaded的事件,同时在formChild的.cs文件中创建私有字段canvas01,formParent在实例化formChild后,执行

    formChild.Canvas01 = this(formParent).canvas;

并在formChild的loaded的绑定事件中执行:this.Children.Add(canvas01);

    结果:报错,当前控件已有parent,不能从新赋值parent。(大意是如此)

    分析:由于用“=”对formChild.Canvas01赋值,所以canvas01拿到的是formParent.canvas的引用。而formParent.canvas的parent是存在的,及formParent上的某个grid或者window。由此也就明白了解决方法00中的分析是错误的,真正原因是这一个。

解决方法02:经由解决方法01的失败,明白了问题的根结,所以问题转变为,如何在新窗体上去除传入窗口的控件的parent。在解决方法02的基础上,从formParent处向formChild传入formChild.canvas01的parent控件parentControl。通过parentControl.Children.Remove(formChild.canvas01);

    结果:formChild成功显示了从formParent传来的canvas;但是当关闭formChild回到formParent后,formParent中canvas消失了。

    分析:由于在formChild中调用了parentControl.Children.Remove(formChild.canvas01);所以formParent中已经没有canvas控件对象了。

解决方法03(最终解决方法):经由解决方法02,引发了一个问题,我如何拷贝控件,而不是只拿到控件的引用。这个时候序列化,反序列化就上线了。通过System.Windows.MarkUp.XamlWriter和System.Windows.Markup.XamlReader,来实现控件的拷贝。这两个是静态类,我们直接调用其方法。由此实现了控件canvas的拷贝,然后把拷贝后的canvas传入formChild。由于是拷贝,所以其parent会是null。

    结果:成功显示,并且解决方法02中引发的问题没有发生。

    拷贝代码示例:string str = System.Windows.Markup.XamlWriter.Save(canvas1);
                            pt.C = System.Windows.Markup.XamlReader.Parse(str) as Canvas;

    

 

 

 

 

 

 

 

 

© 著作权归作者所有

浮生若梦欢几何
粉丝 4
博文 21
码字总数 7472
作品 0
东城
程序员
私信 提问
WPF快速指导12: 线程处理模型

WPF快速指导12: 线程处理模型 本文摘要: 1:理解与UI相关的多线程操作; 2:多个窗口多个线程 3:WPF中的多线程异常 1:理解与UI相关的多线程操作 首先来说说传统Winform。我们知道传统Win...

文艺小青年
2017/06/01
0
0
WPF 简易新手引导Demo

应狸璐邀约,在博客园发布的同时,也在慕课网发布一下。 这两天不忙,所以,做了一个简易的新手引导小Demo。因为,不是项目上应用,所以,做的很粗糙,也就是给需要的人,一个思路而已。 新手...

慕丝83075
2018/01/31
0
0
获取当前进程(程序)主窗体句柄并设置wpf的父窗体为此句柄

原文:获取当前进程(程序)主窗体句柄并设置wpf的父窗体为此句柄 有时候在c++调用wpf控件的时候,wpf控件想自己显示窗体,但需要设置owner属性。迂回解决办法是设置wpf的window窗体的父窗体为...

杰克.陈
2018/03/23
0
0
使用WPF制作视频监控多画面切换

  前言 曾有做过一个产品,有一个功能是视频监控模块,视频监控首先想到的是视频多画面切换功能,由于前端是用WPF开发的,所以当时就做了一个多画面切换组件,效果如下:   功能设计前提...

jared_an
2018/12/01
0
0
【我们一起写框架】MVVM的WPF框架之序篇(一)

前言 我想,有一部分程序员应该是在二三线城市的,虽然不知道占比,但想来应该不在少数。 我是这部分人群中的一份子。 我们这群人,面对的客户,大多是国内中小企业,或者政府的小部门。这类...

kiba518
2018/09/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

VMware vSphere ESXi主机的访问控制

在vShpere中,访问ESXi主机的途径很多,如下: ESXi DCUI ESXi Shell ESXi SSH ESXi Host Client vCenter --> vSphere web client / vSphere Client VMware vSphere ESXi主机的访问控制,除了......

大别阿郎
40分钟前
4
0
大神讲解CGI、FastCGI和PHP-FPM关系图解

参考资料 概念了解:CGI,FastCGI,PHP-CGI与PHP-FPM:http://www.nowamagic.net/librarys/veda/detail/1319 php中fastcgi和php-fpm是什么东西:https://www.zybuluo.com/phper/note/50231 ......

网络小虾米
49分钟前
5
0
《DNS攻击防范科普系列3》 -如何保障 DNS 操作安全

引言 前两讲我们介绍了 DNS 相关的攻击类型,以及针对 DDoS 攻击的防范措施。这些都是更底层的知识,有同学就来问能否讲讲和我们的日常操作相关的知识点,今天我们就来说说和我们日常 DNS 操...

Mr_zebra
50分钟前
4
0
zk中ServerCnxn

实现接口Stats, Watcher 内部类 DisconnectReason CloseRequestException EndOfStreamException(流关闭) 属性 方法 getSessionTimeout 获取session失效时间 sendResponse 发送回复数据 se......

writeademo
55分钟前
4
0
如何将 Redis 用于微服务通信的事件存储

来源:Redislabs 作者:Martin Forstner 翻译:Kevin (公众号:中间件小哥) 以我的经验,将某些应用拆分成更小的、松耦合的、可协同工作的独立逻辑业务服务会更易于构建和维护。这些服务(也...

中间件小哥
58分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部