C# 使用Setter克隆WPF元素
在我的WPF应用程序中,我有一个带有TabItems的TabControl: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
<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。