使用Setter克隆WPF元素

时间:2014-11-19 13:46:29

标签: c# wpf serialization

在我的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>

我没问题。但我必须使用<Setter...>来更改鼠标悬停时的图像源。

0 个答案:

没有答案