TabItem中的新窗口?

时间:2009-12-18 07:08:54

标签: c# wpf window tabcontrol tabitem

是否可以在Window TabControl中打开另一个TabItem

我想这样做的原因是,如果我的TabItem中有5个TabControl,那么我正在编码所有这些TabItem的一个Window文件及其相关操作会变得非常大。因此,如果有可能为每个TabItem提供自己的Window文件,那就太好了。

或者您如何解决控制Window的{​​{1}}文件过大的问题?

5 个答案:

答案 0 :(得分:8)

<Window ...
     xmlns:local="clr-namespace:MyNamespace"
     >
     <TabControl>
          <TabItem Header="FirstTab">
               <local:MyFirstTabUserControl/>  
          </TabItem>
          <TabItem Header="SecondTab">
               <local:MySecondTabUserControl/>  
          </TabItem>
          <TabItem Header="ThirdTab">
               <local:MyThirdTabUserControl/>  
          </TabItem>
     </TabControl>
</Window>

您的每个TabUserControl实际上都是简单的UserControl,因为TabItem可以将任何控件托管为自己的子项。

答案 1 :(得分:4)

您有多种选择:

  • 向您的应用添加一个或多个resource dictionaries,其中包含资源,其中包含您在标签中托管的各种视图的模板和样式。如果您只需要保持视觉树的分离,这种方法很有效。
  • 为每个视图创建user controls(使用自己的XAML和类文件),并为选项卡中的每个不同视图使用一个实例。此方法允许您将特定的业务逻辑和相应的可视树一起封装。
  • 从代码生成一些UI。这个没有任何优势,除了让你的XAML更小。并且你的.cs文件变得太大了,你总是可以将它们分成多个代码文件并使用部分类。 (只是为了完整性而抛弃这个: - ))

答案 2 :(得分:3)

您还可以将TabItem内容设置为等于窗口内容

ex:[WindowType是你的窗口]

WindowsType oWindow = new WindowType();
TabItem oTab = new TabItem();
oTab.Content = oWindow.Content;

答案 3 :(得分:2)

为每个TabItem创建一个UserControl。

答案 4 :(得分:0)

您可以使用已经提到过的UserControl。

但您也可以使用Page控件。每个“窗口”都是一个页面,选项卡中会有一个NavigationControl。我之前使用过这种方法,效果很好。我更喜欢UserControl路由,但两者都有效。