wpf如何将grid以及grid中的子控件复制到另一个窗口中

有只小狗叫八宝 2016-09-23 11:42:14
我有一个Grid1(在最外面),里面有path控件,以及很多子grid,子grid中也放着path,Grid1中还有textbox控件,Grid1中通过程序控制,有的子grid和path会显示,有的设置了隐藏,我想把Grid1复制到另一个窗口,让他在另一个窗口中也和在原本窗口中一样,该显示的子grid和path显示,该隐藏的隐藏,这个要怎么实现?
例如:

--Grid1
--grid2
--path1
--path2
--textbox1

grid2、path2、textbox1都是Grid1子控件,path1又是grid2的子控件,在A窗口中我设置了path1显示,path2隐藏,如何点击一个按钮(“复制”button)把整个的Grid1复制到窗口B中,并且在B中也是path1显示,path2隐藏?

...全文
1247 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 11 楼 muzizongheng 的回复:
[quote=引用 10 楼 yumo9 的回复:] 啊……还没有写完…… A面后台: printPage = new Print_page();//B页面 printPage.PanelSource_vector = ygxl_grid;//B窗口的object等于A窗口的grid printPage.ShowDialog();//B窗口显示 B面后台: private object panelSource_vector; public object PanelSource_vector { set { panelSource_vector = value; } get { return panelSource_vector; } } 这样A窗口的grid就可以给B窗口了~~ 再次感谢!!!
恭喜lz.[/quote] 多谢您的指点
muzizongheng 2016-10-24
  • 打赏
  • 举报
回复
引用 10 楼 yumo9 的回复:
啊……还没有写完…… A面后台: printPage = new Print_page();//B页面 printPage.PanelSource_vector = ygxl_grid;//B窗口的object等于A窗口的grid printPage.ShowDialog();//B窗口显示 B面后台: private object panelSource_vector; public object PanelSource_vector { set { panelSource_vector = value; } get { return panelSource_vector; } } 这样A窗口的grid就可以给B窗口了~~ 再次感谢!!!
恭喜lz.
  • 打赏
  • 举报
回复
啊……还没有写完…… A面后台: printPage = new Print_page();//B页面 printPage.PanelSource_vector = ygxl_grid;//B窗口的object等于A窗口的grid printPage.ShowDialog();//B窗口显示 B面后台: private object panelSource_vector; public object PanelSource_vector { set { panelSource_vector = value; } get { return panelSource_vector; } } 这样A窗口的grid就可以给B窗口了~~ 再次感谢!!!
  • 打赏
  • 举报
回复
引用 7 楼 muzizongheng 的回复:
[quote=引用 6 楼 yumo9 的回复:] [quote=引用 5 楼 muzizongheng 的回复:] 有些ui元素是不支持序列化的 . 2个方法. 1. 用xaml的save和load方法, 也就是序列化, 但这个情况会丢失一些元素或者一些元素的某个属性. 2. 如果你只是在另一个窗体进行显示, 也就是看看, 可以用VisualBrush, 实现类似鹰眼的效果.
谢谢我去试试~~~ 对了,用第二种方法,我在另一个页面显示出来后可以调用窗口打印类进行截图操作吗? 如果不能截图保存,调到另一个页面我也实现不了最终的功能……( ▼-▼ )[/quote] 可以的。 因为只要是ui显示了, 你都可以指定一个区域进行截图,然后发送打印机打印。 [/quote] 非常感谢,这个办法很好用,只要解决了传参问题就可以很简单的实现了 http://www.c-sharpcorner.com/uploadfile/raj1979/visual-brush-in-wpf/ 这里有一些教程 我把我的解决方法贴上来,供参考吧 A面的grid在B面显示: A面后台: printPage = new Print_page(); printPage.PanelSource_vector = ygxl_grid; printPage.PanelSource_connect = grid_connect; printPage.txt_power.Text = "功率表达式\n\n" + tex_PowerExpres_three.Text; printPage.txt_simple.Text = "化简式\n\n" + tex_Simple_three.Text; printPage.txt_correct.Text = "更正系数\n\n" + tex_Correct_three.Text; string String = combox_connectmethod.SelectedItem.ToString(); printPage.txt_method.Text = String.Substring(38); printPage.txt_group.Text = tex_ConGroup_yg_three.Text; printPage.txt_u.Text = text_v.Text; String = combox_current.SelectedItem.ToString(); printPage.txt_i.Text = String.Substring(38); printPage.ShowDialog(); B面前端: <Rectangle x:Name="re_vector" Margin="8,88.173,0,251.627" Width="315" Height="225" HorizontalAlignment="Left" d:LayoutOverrides="Width"> <Rectangle.Fill > <VisualBrush x:Name="visual_vector" TileMode="None" Viewport="0,0,1,1"/> </Rectangle.Fill> </Rectangle>
xinbada1985 2016-10-13
  • 打赏
  • 举报
回复
很简单吧,想要共用的部分,直接在WPF封装成一个控件,直接调用这个控件就可以了 !
muzizongheng 2016-10-11
  • 打赏
  • 举报
回复
引用 6 楼 yumo9 的回复:
[quote=引用 5 楼 muzizongheng 的回复:] 有些ui元素是不支持序列化的 . 2个方法. 1. 用xaml的save和load方法, 也就是序列化, 但这个情况会丢失一些元素或者一些元素的某个属性. 2. 如果你只是在另一个窗体进行显示, 也就是看看, 可以用VisualBrush, 实现类似鹰眼的效果.
谢谢我去试试~~~ 对了,用第二种方法,我在另一个页面显示出来后可以调用窗口打印类进行截图操作吗? 如果不能截图保存,调到另一个页面我也实现不了最终的功能……( ▼-▼ )[/quote] 可以的。 因为只要是ui显示了, 你都可以指定一个区域进行截图,然后发送打印机打印。
  • 打赏
  • 举报
回复
引用 5 楼 muzizongheng 的回复:
有些ui元素是不支持序列化的 . 2个方法. 1. 用xaml的save和load方法, 也就是序列化, 但这个情况会丢失一些元素或者一些元素的某个属性. 2. 如果你只是在另一个窗体进行显示, 也就是看看, 可以用VisualBrush, 实现类似鹰眼的效果.
谢谢我去试试~~~ 对了,用第二种方法,我在另一个页面显示出来后可以调用窗口打印类进行截图操作吗? 如果不能截图保存,调到另一个页面我也实现不了最终的功能……( ▼-▼ )
muzizongheng 2016-09-27
  • 打赏
  • 举报
回复
有些ui元素是不支持序列化的 . 2个方法. 1. 用xaml的save和load方法, 也就是序列化, 但这个情况会丢失一些元素或者一些元素的某个属性. 2. 如果你只是在另一个窗体进行显示, 也就是看看, 可以用VisualBrush, 实现类似鹰眼的效果.
  • 打赏
  • 举报
回复
都木有人会么???
  • 打赏
  • 举报
回复
重新new这些控件,然后一层一层的重新添加到B中
  • 打赏
  • 举报
回复
然后我现在找到了序列化的代码,尝试把Grid1序列化、反序列化传给B窗口new的grid,但是报错显示“System.Windows.Controls.Grid 未标记为可序列化“
这个要怎么解决?
  • 打赏
  • 举报
回复
引用 1 楼 Libby1984 的回复:
重新new这些控件,然后一层一层的重新添加到B中
可以说的详细一点么?有木有示例啊?难道不能就直接把一个Grid1传过去就行的方法么?

8,735

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧