2

我需要克隆选项卡的所有内容以反映 WPF TabItem 的当前状态,完全保留所有绑定。要求是每个选项卡都应使用自己的一组相同控件独立运行。到目前为止,我只设法创建了空白标签。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;
4

2 回答 2

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>
于 2012-12-19T13:12:31.237 回答
0

为什么要克隆完整的标签页?

如果您有一个使用 MVVM 将您的 ui 与数据分离的数据视图模型 - 那么您可以克隆您的数据,这更容易且设计更简洁,并且您可以避免可视化树、父级等问题。

所以你的代码可能就像 new Maintab(){DataContext=MainData.Clone()}

于 2012-12-19T11:58:53.573 回答