2016-12-12 5 views
0

私は動的に作成したい1つのListBoxと1つのWebBrowserタイプの内容でTabItemを作成します。 ヘッダー部分を正しく追加できますが、DataTemplateに複数の内容を追加する方法はわかりません。DataTemplateで複数のコンテンツをWPFで動的にバインドする方法はありますか

 private TabItem AddTabItem() 
     { 
      int count = _tabItems.Count; 

     TabItem tab = new TabItem(); 

     tab.Header = string.Format("Tab {0}", count); 
     tab.Name = string.Format("tab{0}", count); 

     WebBrowser wbr = new WebBrowser(); 
     wbr.MaxHeight = 1550; 
     wbr.MaxWidth = 1550; 
     wbr.Navigate("https://google.com"); 
     tab.Content = wbr; 

     //Header Part is working Fine 
     tab.HeaderTemplate = tabDynamic.FindResource("TabHeader") as DataTemplate; 

     //I Want to add below commented line in my code for Content 
     // tab.ContentTemplate = tabDynamic.FindResource("TabCont") as DataTemplate; 

     return tab; 
} 



     <TabControl x:Name="tabDynamic" ItemsSource="{Binding}" > 
      <!--SelectionChanged="tabDynamic_SelectionChanged"--> 
      <TabControl.Resources> 
       <DataTemplate x:Key="TabHeader" DataType="TabItem"> 
        <DockPanel> 
         <Button x:Name="btnDelete" DockPanel.Dock="Right" Margin="5,0,0,0" Padding="0" Click="btnDelete_Click" CommandParameter="{Binding Name, RelativeSource={RelativeSource AncestorType={x:Type TabItem}}}"> 
          <Image Source="/delete.gif" Height="11" Width="11"/> 
         </Button> 
         <TextBlock Text="{Binding Header, RelativeSource={RelativeSource AncestorType={x:Type TabItem}}}" /> 

        </DockPanel> 
       </DataTemplate> 

       <DataTemplate x:Key="TabCont" DataType="TabItem"> 

       <!-- ========================== --> 
         <!-- Bind Dynamically --> 
       <!-- one list box--> 
       <!-- Webbrowser--> 
       <!-- ========================== --> 

       </DataTemplate> 
      </TabControl.Resources> 

     </TabControl> 
+0

データテンプレートに複数のコンテンツを追加することはできません。代わりに、そのテンプレートをサポートしているアイテム(StacKPanel、Grid、DockPanelなど)にコンテンツを設定することができます。意味をなさない – MikeT

答えて

0

TabItemのContentプロパティを1つのパネルに設定する必要があります。このパネルにいくつかの要素を追加することができます。どのパネルを使用するかは、レイアウト要件によって異なります。パネルは異なる特性を有する:https://msdn.microsoft.com/en-us/library/ms754152(v=vs.110).aspx。あなたはそれがこれらのためのDataTemplateを使用しても意味がありません動的に要素を作成したいので

private TabItem AddTabItem() 
    { 
     int count = _tabItems.Count; 

     TabItem tab = new TabItem(); 

     tab.Header = string.Format("Tab {0}", count); 
     tab.Name = string.Format("tab{0}", count); 

     WebBrowser wbr = new WebBrowser(); 
     wbr.MaxHeight = 1550; 
     wbr.MaxWidth = 1550; 
     wbr.Navigate("https://google.com"); 
     DockPanel.SetDock(wbr, Dock.Bottom); 

     ListBox listBox = new ListBox(); 

     DockPanel dockPanel = new DockPanel(); 
     dockPanel.Children.Add(wbr); 
     dockPanel.Children.Add(listBox); 
     tab.Content = dockPanel; 

     tab.HeaderTemplate = tabDynamic.FindResource("TabHeader") as DataTemplate; 

     return tab; 
    } 

<TabControl x:Name="tabDynamic"> 
     <TabControl.Resources> 
      <DataTemplate x:Key="TabHeader" DataType="TabItem"> 
       <DockPanel> 
        <Button x:Name="btnDelete" DockPanel.Dock="Right" Margin="5,0,0,0" Padding="0" 
          CommandParameter="{Binding Name, RelativeSource={RelativeSource AncestorType={x:Type TabItem}}}"> 
         <Image Source="/delete.gif" Height="11" Width="11"/> 
        </Button> 
        <TextBlock Text="{Binding Header, RelativeSource={RelativeSource AncestorType={x:Type TabItem}}}" /> 
       </DockPanel> 
      </DataTemplate> 
     </TabControl.Resources> 
    </TabControl> 

は、次の例のようにDockPanelを使用することができます。

関連する問題