欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

WPF控件操作之改变父控件之TabControl示例

程序员文章站 2022-05-15 19:01:43
昨天做个简单的演示,想偷懒,但同时又想用WPF再做一个,稍微提高一下演示的美观,助力拿下订单。所以,在做完WinForm后,又做了一个wpf版本的,但控件在不同容器之间的移动,winform和wpf差别很大,winform很简单、直观。但wpf就很坑了。 于是昨天下午网上搜了一些“答案”,都不能解决 ......

昨天做个简单的演示,想偷懒,但同时又想用wpf再做一个,稍微提高一下演示的美观,助力拿下订单。所以,在做完winform后,又做了一个wpf版本的,但控件在不同容器之间的移动,winform和wpf差别很大,winform很简单、直观。但wpf就很坑了。

于是昨天下午网上搜了一些“答案”,都不能解决问题。今天又重新理了一下头绪,非常简单的实现了,并没有用到网上那些很装逼的答案。

效果图WPF控件操作之改变父控件之TabControl示例

,要实现的效果就是通过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         }