WPF控件操作之改变父控件之TabControl示例
程序员文章站
2023-02-21 15:35:15
昨天做个简单的演示,想偷懒,但同时又想用WPF再做一个,稍微提高一下演示的美观,助力拿下订单。所以,在做完WinForm后,又做了一个wpf版本的,但控件在不同容器之间的移动,winform和wpf差别很大,winform很简单、直观。但wpf就很坑了。 于是昨天下午网上搜了一些“答案”,都不能解决 ......
昨天做个简单的演示,想偷懒,但同时又想用wpf再做一个,稍微提高一下演示的美观,助力拿下订单。所以,在做完winform后,又做了一个wpf版本的,但控件在不同容器之间的移动,winform和wpf差别很大,winform很简单、直观。但wpf就很坑了。
于是昨天下午网上搜了一些“答案”,都不能解决问题。今天又重新理了一下头绪,非常简单的实现了,并没有用到网上那些很装逼的答案。
效果图
,要实现的效果就是通过tabcontrol的select事件,让最子层的界面在第二层tabcontrol的不同tabitem之间移动,而第二层tabcontrol又在最顶层的tabcontrol的tabitem之间移动。伪造每个页面都有内容的假象,并且用黑体字符串来标识不同的tabitem。
xaml代码
1 <tabcontrol grid.row="1" name="tabcontrol1" selectedindex="0" selectionchanged="tabcontrol1_selectionchanged"> 2 <tabitem header="生产模式"> 3 <tabcontrol x:name="tabcontrol2" selectedindex="0" selectionchanged="tabcontrol1_selectionchanged"> 4 <tabitem header="单站查询"> 5 <dockpanel x:name="container" lastchildfill="true"> 6 <grid dockpanel.dock="top"> 7 <grid.rowdefinitions> 8 <rowdefinition/> 9 <rowdefinition/> 10 </grid.rowdefinitions> 11 <grid.columndefinitions> 12 <columndefinition width="2*"/> 13 <columndefinition width="2*"/> 14 <columndefinition width="4*"/> 15 <columndefinition width="1*"/> 16 </grid.columndefinitions> 17 <label grid.row="0" grid.column="0" content="不良品查询方式"/> 18 <combobox grid.row="1" grid.column="0" selectedindex="0"> 19 <comboboxitem content="按固定时间查询"/> 20 <comboboxitem content="按批次查询"/> 21 <comboboxitem content="按产品型号查询"/> 22 </combobox> 23 <label grid.row="0" grid.column="1" content="选择日期"/> 24 <datepicker grid.row="1" grid.column="1"/> 25 <label grid.row="0" grid.column="2" grid.rowspan="2" x:name="lbltitle" background="aliceblue" fontweight="extrabold" fontsize="20" verticalalignment="center" horizontalalignment="center"/> 26 <button content="生成报表" grid.column="3" grid.row="1"/> 27 </grid> 28 <datagrid x:name="grid"/> 29 </dockpanel> 30 </tabitem> 31 <tabitem header="所有数据查询"></tabitem> 32 <tabitem header="不良数据查询"></tabitem> 33 <tabitem header="巡检件查询"></tabitem> 34 <tabitem header="报废记录查询"></tabitem> 35 <tabitem header="返工记录查询"></tabitem> 36 <tabitem header="mes数据查询"></tabitem> 37 <tabitem header="产量查询"></tabitem> 38 </tabcontrol> 39 </tabitem> 40 <tabitem header="补单模式"> 41 </tabitem> 42 </tabcontrol>
c#代码
1 private void tabcontrol1_selectionchanged(object sender, selectionchangedeventargs e) 2 { 3 tabcontrol tab = sender as tabcontrol; 4 tabitem tabitem = tab.selecteditem as tabitem; 5 if (tabitem != null) 6 { 7 if (tab == tabcontrol1) 8 { 9 (tab.selecteditem as contentcontrol).content = tabcontrol2; 10 } 11 else 12 { 13 (tab.selecteditem as contentcontrol).content = container; 14 } 15 } 16 17 if (tabcontrol1.selectedindex != -1 && tabcontrol2.selectedindex != -1) 18 { 19 lbltitle.content = (tabcontrol1.selecteditem as tabitem).header + "->" + (tabcontrol2.selecteditem as tabitem).header; 20 } 21 }