下面的文章展示了如何在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个文本框?我可以为此目的创建用户控件吗?那么如何将用户控件添加到选项卡控件?
尝试以下步骤:
添加用户控件(比方说在 ComplexControl.xaml 中)
<UserControl ... >
<Grid>
<Rectangle Width="100" Height="100" Fill="Red"/>
</Grid>
</UserControl>
Run Code Online (Sandbox Code Playgroud)创建一个类
Public myComplexContolClass
{
//....
}
Run Code Online (Sandbox Code Playgroud)将它们映射在一起,这样当您的应用程序中有一个 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)
将其添加到您的代码中:
private TabItem AddTabItem()
{
// ...
myComplexContolClass control = new myComplexContolClass();
tab.Content = control;
// ...
}
Run Code Online (Sandbox Code Playgroud)