2012-12-13 24 views
-1

我在將控件特定資源(特別是Style)添加到定義了合併ResourceDictionary的控件時遇到問題。如果重要,我的XAML文件位於我正在工作的主項目的子文件夾中。添加Silverlight樣式和ResourceDictionary時出現XamlParseException

我開始:

<controls:ChildWindow.Resources> 

    <Style x:Key="ParmatersText" TargetType="TextBlock"> 
     <Setter Property="Margin" Value="5,5"/> 
    </Style> 

</controls:ChildWindow.Resources> 

但是當我加入這個有一個問題:

<controls:ChildWindow.Resources> 

    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="my.foo.bar;component/MyResources.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 

    <Style x:Key="ParmatersText" TargetType="TextBlock"> 
     <Setter Property="Margin" Value="5,5"/> 
    </Style> 

</controls:ChildWindow.Resources> 

隨着The designer does not support loading dictionaries that mix 'ResourceDictionary' items without a key and other items in the same collection.

錯誤消息從這個SO Question收視率最高的答案告訴我嘗試以下操作,這會改變</ResourceDictionary>標記的位置。這other SO question和那裏的答案鏈接支持這種方法。

<controls:ChildWindow.Resources> 

    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="my.foo.bar;component/MyResources.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 

    <Style x:Key="ParmatersText" TargetType="TextBlock"> 
     <Setter Property="Margin" Value="5,5"/> 
    </Style> 

    </ResourceDictionary> 
</controls:ChildWindow.Resources> 

然而,失敗與XamlParseException到Failed to assign to property 'System.Windows.ResourceDictionary.Source'

從同樣的問題的影響,我想這給了我這個標記的答案:

<controls:ChildWindow.Resources> 

    <ResourceDictionary x:Key="MyDictionary"> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="my.foo.bar;component/MyResources.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 

    <Style x:Key="ParmatersText" TargetType="TextBlock"> 
     <Setter Property="Margin" Value="5,5"/> 
    </Style> 

</controls:ChildWindow.Resources> 

然而,失敗的與之前一樣的XamlParseException。

這兩篇關於XAML ResourcesMerged Resource Dictionaries的MSDN文章幫助我理解頁面所隱含的ResourceDictionary,而且顯然通過在隱式字典中定義資源以及指定的合併文檔來創建衝突。

我的問題是上述語法不起作用,我正在拾取XamlParseExceptions。

回答

0

所以我終於找到了解決問題的辦法,我認爲它的一部分是由於我的文件在子文件夾中。

在子窗口的聲明,我添加了以下命名空間:

<controls:ChildWindow xmlns:local="clr-namespace:my.foo.bar" >

和參考資料部分的正確語法是這樣的:

<controls:ChildWindow.Resources> 

    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="MyResources.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 

    <Style x:Key="ParmatersText" TargetType="TextBlock"> 
     <Setter Property="Margin" Value="5,5"/> 
    </Style> 

    </ResourceDictionary> 

</controls:ChildWindow.Resources> 

這是非常接近來自鏈接的SO問題的答案,但在名稱空間的元素中添加了標識資源文件的元素。

相關問題