2017-04-18 3 views
0

2つのWPFアセンブリでテストソリューションを作成しました。 "AssemblyTest" でStaticResourceにより、別のアセンブリからロードされたときにXamlParseExceptionが発生する

、私は、簡単なデフォルトのウィンドウを持っている "OtherWindow"、何もしないこと。 "StartingAssembly"では、AssemblyWindowを初期化してShow()という単純なデフォルトウィンドウ "MainWindow"も持っています。

すべての参照は正しく、両方のウィンドウが正しく表示されます。方法は、それらが期待されている私はStaticResourceを使用するために "OtherWindow" に変更する場合

using AssemblyTest; 

namespace StartingAssembly 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     OtherWindow window = new OtherWindow(); 
     public MainWindow() 
     { 
      InitializeComponent(); 
      window.Show(); 
     } 
    } 
} 

しかし、問題が発生し

これが正常に動作します。。

<Window x:Class="AssemblyTest.OtherWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="OtherWindow" Height="350" Width="525" Background="Blue"> 
    <Grid> 

    </Grid> 
</Window> 
ここでは、最後にAssemblyTest

から
<Application x:Class="AssemblyTest.App" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      StartupUri="OtherWindow.xaml"> 
    <Application.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="/Resources/CommonResourceDictionary.xaml" /> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Application.Resources> 
</Application> 

<Window x:Class="AssemblyTest.OtherWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="OtherWindow" Height="350" Width="525" Background="{StaticResource mainLoginBackground}"> 
    <Grid> 

    </Grid> 
</Window> 

リソースがCommonResourceDictionary.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:sys="clr-namespace:System;assembly=mscorlib"> 

    <RadialGradientBrush x:Key="mainLoginBackground" GradientOrigin="0.5,0.5" Center="0.5,0.5" RadiusX="1" RadiusY="1"> 
     <GradientStopCollection> 
      <GradientStop Color="#ff0f75ba" Offset="0" /> 
      <GradientStop Color="#ff033657" Offset="1" /> 
     </GradientStopCollection> 
    </RadialGradientBrush> 
</ResourceDictionary> 

に位置しています。これは、App.xamlである:

しかし、これはXamlParseExceptionの原因エラー:

私は大きなプロジェクトにも適用できるように、この質問をできるだけ基本的な例を使って書きました。あなたが欠けているものを理解するのを助けることができれば、私が働いているより大きなプロジェクトでこのソリューションを使用することができます。さらに、私は類似の質問のためにStackOverflowを検索しましたが、この特定の問題に近いものはありません。

+0

を、あなたは 'DynamicResource''試すの代わりましたStaticResource'? – Safe

+0

はい、私はそれをコンパイルして実行しますが、スタイルは無視されます。 – Rafael

+0

私が取り組んでいるより大きいプロジェクトで* – Rafael

答えて

1

ResourceDictionaryは、あなたがそれを参照するためにパッケージのURIを使用する必要があります別のアセンブリで定義されているので:

<ResourceDictionary Source="pack://application:,,,/AssemblyTest;component/Resources/CommonResourceDictionary.xaml" /> 

あなたはここにこの詳細を読むことができます:https://msdn.microsoft.com/en-us/library/aa970069(v=vs.110).aspx

+0

このソリューションは機能します。ありがとうございました。 – Rafael

関連する問題