让XamlReader.Load忽略未知的xml而不是崩溃?

时间:2010-09-07 14:34:59

标签: c# .net wpf xml xaml

如何使XamlReader.Load忽略未知属性和元素而不是抛出异常?如果它只忽略那些它会更有用。

2 个答案:

答案 0 :(得分:3)

您不能,XamLReader.Load要求文档格式正确。这意味着:

  • XAML内容字符串必须定义单个根元素。

  • 内容字符串XAML必须是格式良好的XML,并且是可解析的XAML。

  • 必需的根元素还必须指定默认的XML命名空间值。这通常是Silverlight名称空间,xmlns =“http://schemas.microsoft.com/winfx/2006/xaml/presentation”。在Silverlight 2及更高版本中显式需要此XML命名空间,而在Silverlight 1.0及其CreateFromXaml JavaScript方法中隐式假设它。

可以在msdn找到更多信息。

答案 1 :(得分:1)

你无法忽略未知的属性和元素。如果由于反序列化以外的原因需要将属性和元素粘贴到XAML中,请将它们放在自己的命名空间中,例如:

<Window x:Class="MyApp.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="my"
    xmlns:my="my-namespace"
    Title="MainWindow" Height="350" Width="525">
  <StackPanel my:Attribute="The XamlReader will ignore this.">
    <my:Element>It will ignore this, too.</my:Element>
  </StackPanel>
</Window>

请注意,您必须使用标记兼容性命名空间并将名称空间前缀添加到其Ignorable属性,以使XamlReader忽略您的命名空间而不是抛出异常。有关详细信息,请参阅the mc:Ignorable documentation