在我的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...>
来更改鼠标悬停时的图像源。