昨天做个简单的演示,想偷懒,但同时又想用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         }