Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Setter克隆WPF元素_C#_Wpf_Serialization - Fatal编程技术网

C# 使用Setter克隆WPF元素

C# 使用Setter克隆WPF元素,c#,wpf,serialization,C#,Wpf,Serialization,在我的WPF应用程序中,我有一个带有TabItems的TabControl: <TabItem.Header> <StackPanel Orientation="Horizontal"> <TextBlock Name ="TabHeader"/> <Image Margin="7,0,0,0"> <Image.Style> <Styl

在我的WPF应用程序中,我有一个带有TabItems的TabControl:

<TabItem.Header>
    <StackPanel Orientation="Horizontal">
        <TextBlock Name ="TabHeader"/>
        <Image Margin="7,0,0,0">
            <Image.Style>
                <Style>
                    <Setter Property="Image.Source" Value="Pictures/CroixRouge.png"/> // No error without this line         
                </Style>
            </Image.Style>
        </Image>
    </StackPanel>
</TabItem.Header>
我克隆了这个TabItem,在TabControl中添加了一个,具有以下功能:

TabItem ti = (TabItem)_tabControlList.Items.GetItemAt(_tabControlList.Items.Count - 1);
TabItem tiCloned= TrycloneElement<TabItem>(ti);

private static T TrycloneElement<T>(T orig)
{
    try
    {
        string s = System.Windows.Markup.XamlWriter.Save(orig); // ERROR : Impossible to serialize a non-public type 'System.Windows.Media.Imaging.BitmapFrameDecode'

        StringReader stringReader = new StringReader(s);

        XmlReader xmlReader = XmlTextReader.Create(stringReader, new XmlReaderSettings());
        XmlReaderSettings sx = new XmlReaderSettings();

        object x = System.Windows.Markup.XamlReader.Load(xmlReader);
        return (T)x;
    }
    catch
    {
        return (T)((object)null);
    }

}
为什么会出现这个错误?当我将图像放置在以下位置时:

<TabItem.Header>
    <StackPanel Orientation="Horizontal">
        <TextBlock Name ="TabHeader"/>
        <Image Margin="7,0,0,0" Source="Pictures/CroixRouge.png"/>
    </StackPanel>
</TabItem.Header>

我没有问题。但是我必须使用来更改鼠标悬停时的图像源。

不确定为什么要克隆某些内容,而您需要的只是更改鼠标悬停时的图像源?我需要克隆一个tabItem及其所有属性以添加其他tabitems。