在WPF中克隆TabItem的最简单方法是什么?

时间:2012-12-19 11:23:06

标签: c# .net wpf tabcontrol tabitem

我需要克隆选项卡的所有内容以反映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;

2 个答案:

答案 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()}