如何在WPF中的选项卡控件中添加用户控件

Ela*_*ahe 6 c# wpf tabitem

下面的文章展示了如何在WPF中创建动态选项卡,在每个选项卡中它将只添加一个文本框.

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

    // create new tab item
    TabItem tab = new TabItem();

    tab.Header = string.Format("Tab {0}", count);
    tab.Name = string.Format("tab{0}", count);
    tab.HeaderTemplate = tabDynamic.FindResource("TabHeader") as DataTemplate;

    tab.MouseDoubleClick += new MouseButtonEventHandler(tab_MouseDoubleClick);

    // add controls to tab item, this case I added just a textbox
    TextBox txt = new TextBox();

    txt.Name = "txt";
    tab.Content = txt;
    // insert tab item right before the last (+) tab item
    _tabItems.Insert(count - 1, tab);

    return tab;
}
Run Code Online (Sandbox Code Playgroud)

http://www.codeproject.com/Articles/493538/Add-Remove-Tabs-Dynamically-in-WPF

我可以做些什么来添加一些复杂的控件,他们的位置是固定的,而不是只有1个文本框?我可以为此目的创建用户控件吗?那么如何将用户控件添加到选项卡控件?

Noa*_*m M 5

尝试以下步骤:

  1. 添加用户控件(比方说在 ComplexControl.xaml 中)

    <UserControl ... >
       <Grid>
           <Rectangle Width="100" Height="100" Fill="Red"/>
        </Grid>
     </UserControl> 
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建一个类

    Public myComplexContolClass
    {
         //....
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将它们映射在一起,这样当您的应用程序中有一个 myComplexContolClass 时,它就会是 1 中的 UserControl。可以使用 DataTemplate 完成映射:

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                        ...
                        xmlns:models="clr-namespace: ... .Model"
                        xmlns:views="clr-namespace: ... .View"
                        >
    
        <DataTemplate DataType="{x:Type models:myComplexContolClass}">
            <views:ComplexControl/>
        </DataTemplate>
    
    </ResourceDictionary>
    
    Run Code Online (Sandbox Code Playgroud)

或者

    <Window ...
            xmlns:models="clr-namespace: ... .Model"
            xmlns:views="clr-namespace: ... .View"
            >

        <Window.Resources>

            <DataTemplate DataType="{x:Type models:myComplexContolClass}">
                <views:ComplexControl/>
            </DataTemplate>

        </Window.Resources>

        // ...

    </Window>
Run Code Online (Sandbox Code Playgroud)
  1. 将其添加到您的代码中:

    private TabItem AddTabItem()
    {
        // ...
    
        myComplexContolClass control = new myComplexContolClass();
        tab.Content = control;
    
        // ...
    }
    
    Run Code Online (Sandbox Code Playgroud)