2013-08-28 17 views
0

我試圖使用它具有以下內容給定的XAML文件的內容不被分析正確

<Canvas xmlns:seic="clr-namespace:NameSpace1;assembly=Assembly1" 
    xmlns:seidm="clr-namespace:NameSpace2;assembly=Assembly2" 
    xmlns:seogptpi="clr-namespace:NameSpace3;assembly=Assembly3" 
    xmlns:seogdc="clr-NameSpace4;assembly=Assembly4" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    x:Name="_99abfc59e3ad417d98db31591a6f9dd7" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    Canvas.Left="0" Canvas.Top="0" Tag="TemplatePart" Width="800" Height="600" 
    seogdc:FrameworkElementExtensions.Id="Canvas" 
    seogdc:FrameworkElementExtensions.ShowRotateCue="False" 
    seogdc:FrameworkElementExtensions.ShowPositionCue="False" 
    seogdc:FrameworkElementExtensions.IsSizeSerializable="False" 
    seogdc:FrameworkElementExtensions.IsTargetDimensions="False"> 
<Canvas x:Name="Canvas1" 
     Canvas.Left="0"  
     Canvas.Top="0" 
     Tag="TemplatePart" 
     Width="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorLevel=1, AncestorType={x:Type Canvas}}, Path=Width}" 
     Height="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorLevel=1, AncestorType={x:Type Canvas}}, Path=Height}" 
     Background="{x:Static Brushes.Black}" 
     seogdc:FrameworkElementExtensions.Id="Canvas" 
     seogdc:FrameworkElementExtensions.ShowRotateCue="False" 
     seogdc:FrameworkElementExtensions.ShowPositionCue="False" 
     seogdc:FrameworkElementExtensions.IsTargetDimensions="False" 
     seogptpi:TemplateManager.IsMainPart="True" 
     seogptpi:TemplateManager.TemplateName="Canvas"> 
<seic:DomainParameter.DomainModel> 
    <seidm:StatelessDomainModel> 
    <seidm:StatelessDomainModel.DomainFeatures> 
     <seidm:ColorFeature LabelFillTransparency="0"> 
     <seidm:ColorFeature.FontBlinkSetting> 
      <seidm:ColorTransparancy Transparancy="0" /> 
     </seidm:ColorFeature.FontBlinkSetting> 
     <seidm:ColorFeature.LineBlinkSetting> 
      <seidm:ColorTransparancy Transparancy="0" /> 
     </seidm:ColorFeature.LineBlinkSetting> 
     <seidm:ColorFeature.FillBlinkSetting> 
      <seidm:ColorTransparancy Transparancy="0" /> 
     </seidm:ColorFeature.FillBlinkSetting> 
     </seidm:ColorFeature> 
    </seidm:StatelessDomainModel.DomainFeatures> 
    </seidm:StatelessDomainModel> 
</seic:DomainParameter.DomainModel> 
    </Canvas> 
</Canvas> 

的XamlReader來解析XML文件,但它只是拋出一個XamlParseException(「無法設置未知成員」 Namespace2.ColorFeature .LabelFillTransparency'。'行號'13'和行位置'31')。我已經添加了對上述4個組件的引用。出於隱私的目的,我選擇不提供確切的彙編名稱。 有人可以告訴我會發生什麼事嗎?

在此先感謝。

+0

看沒有反應,我覺得我可能會問一個愚蠢的問題。我現在已經停留了這個問題。我真的希望有人幫助我弄清楚這裏出了什麼問題。 – Anee

回答

0

您需要爲XamlReader.Parse方法提供自定義ParserContext。您應該指定ParserContext.XamlTypeMapper屬性以啓用XamlParser來查找您的XAML中引用的類型。沿着這些線:

var context = new ParserContext(); 
context.XamlTypeMapper = new XamlTypeMapper(
    new[] { 
    Assembly.GetExecutingAssembly().GetName().Name, 
    "Assembly1", 
    "Assembly2", 
    "Assembly3", 
    "Assembly4", 
    } 
); 
var element = (FrameworkElement) XamlReader.Parse(xaml, context); 
+0

我試過你問我的解決方案,它仍然無法找到xaml中提到的類型。我試着給組裝路徑也使用XamlTypeMapper。但仍然沒有運氣:(我非常希望當我看到你的回覆,但我的運氣不好時,即使這不起作用.. – Anee

+0

@Anee:除非你的XAML有錯誤,否則你應該能夠解析它,如果你提供了正確的' ParserContext'。你得到的錯誤不是一個缺少的類型,而是一個未知的成員,它可以幫助你解決你的問題。你能實例化一個'ColorFeature'並從代碼中訪問'LabelFillTransparency'? –

+0

嗨,我能夠創建上面提到的類型在代碼中完全沒有任何問題但是當我嘗試加載上面的XAML時它不起作用 – Anee