我需要克隆选项卡的所有内容以反映WPF TabItem的当前状态,完全保留所有绑定。要求是每个Tab应该独立地使用其自己的相同控件组。到目前为止,我只设法创建空白标签。 MSDN建议这是不可能的。看起来很像MS错过的基本功能,这可能吗?
// locate the TabControl that the tab will be added to
TabControl itemsTab = (TabControl) this.FindName("tabControl");
// create and populate the new tab and add it to the tab control
TabItem newTab = new TabItem(); //This should instead clone an existing tab called "mainTab"
newTab.Content = detail;
newTab.Header = name;
itemsTab.Items.Add(newTab);
// display the new tab to the user; if this line is missing
// you get a blank tab
itemsTab.SelectedItem = newTab;
答案 0 :(得分:3)
public MainWindow()
{
InitializeComponent();
TabItem tab2 = TrycloneElement(tab1);
if (tab2 != null)
main.Items.Add(tab2);
}
public static T TrycloneElement<T>(T orig)
{
try
{
string s = XamlWriter.Save(orig);
StringReader stringReader = new StringReader(s);
XmlReader xmlReader = XmlTextReader.Create(stringReader, new XmlReaderSettings());
XmlReaderSettings sx = new XmlReaderSettings();
object x = XamlReader.Load(xmlReader);
return (T)x;
}
catch
{
return (T)((object)null);
}
}
XAML
<TabControl Width="500" x:Name="main">
<TabItem Header="AMTAB1" x:Name="tab1">
<TextBlock Text="blalbla"></TextBlock></TabItem>
</TabControl>
答案 1 :(得分:0)
为什么要克隆完整的标签页?
如果你有一个使用MVVM分离ui和数据的数据的视图模型 - 那么你可以只修复你的数据,这样更简单,设计更清晰,你可以避免使用可视树,父类等问题。 / p>
所以你的代码可能就像新的Maintab(){DataContext = MainData.Clone()}