2017-08-28 99 views
0

我MainWindow.xaml的结构是波纹管如何将WPF窗口作为TabControl项目加载到MainWindow中?

<Window> 
    <Grid> 
    <TabControl Name="MainTabCntrl"> 
     <TabItem1> 
     <TabItem2> 
     <TabItem3> 
     . 
     . 
     . 
     <TabItemN> 
    </TabControl> 
    </Grid> 
</Window> 

的问题是,我的MainWindow.xaml目前〜4000行代码,这是效率不高(你同意吗?) 解决方案我米试图实现是创建N个窗口(代表我的TabItems)分别和标签的物品,每次用户点击我加载相关的窗口在TabItem的如波纹管

private void inventory_start()//this function is called in my MainWinodw.xaml.cs 
     { 
      inv = new Inventory(db, logViewer);//this is a window 
      TabItem tbItem = new TabItem(); 
      Frame frame = new Frame(); 
      frame.Content = inv; 
      tbItem.Name = "invTab"; 
      tbItem.Content = frame; 
      tbItem.IsSelected = true; 
      MainTabCntrl.Items.Add(tbItem); 
      inv.swithInventoryTabs("inv_info"); 
     } 

我有一个错误,现在,“'Management_V0 。库存根元素对于导航无效。“

+2

一下怎么样'Inventory'和其它标签的内容是一个'用户控件'或其他类型的窗口*内容*而不是“窗口”?我认为如何创建N个单独的TabItem内容比回答如何加载嵌套窗口(您可能不需要)要容易得多。 – grek40

+0

@ grek40感谢您的回答,您对创建N个单独的TabItem内容有何看法? – Amir

+0

我可以近距离投票这个问题*“主要基于意见”*如果这就是你要求的。请遵循问题指南并说明您的具体问题,而不是征求意见。 – grek40

回答

1

窗口不能是另一个元素的孩子。期。

但你可能只是移动Inventory窗口中的内容到UserControl(例如通过简单的复制和粘贴的XAML和从一个文件到另一个代码),并用这一个作为Inventory窗口ContentFrame

<Window x:Class="WpfApplication1.Inventory" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:WpfApplication1" 
     mc:Ignorable="d" 
     Title="Inventory" Height="300" Width="300"> 
    <local:UserControl1 /> 
</Window> 

Frame frame = new Frame(); 
frame.Content = new UserControl1(); 
+0

谢谢亲爱的@ mm8我明白了,没有窗户。 以及你对整个事情的看法?这是必要的,以减轻mainwindows.xaml或其不? – Amir

+0

好吧,如果MainWindow的内容很大,我想将代码分成几个不同的UserControl是有意义的。请注意,您可以直接将TabItem的内容设置为UserControl,而不需要Frame。 – mm8

1

使用TabControl的最佳方法是使用用户控制:下面的实施例: XAML

<TabControl > 
       <TabItem x:Name="tab1" Header="UserControl"></TabItem> 
       <TabItem x:Name="tab2" Header="noControl"></TabItem> 
      </TabControl> 

,并在后面的类代码:

tab1.Content = new UserControl1(); 

,比添加名称的UserControl1新的用户控件:

<UserControl x:Class="WpfApplication1.UserControl1" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"> 
    <Grid> 
     <Viewbox> 
      <TextBlock Text="User Control"/> 
     </Viewbox> 
    </Grid> 
</UserControl> 
相关问题