9

WPF では、テーマ フォルダー内の個別の XAML ファイルにマークアップを保持し、MergedDictionaries を使用してそれらを generic.xaml にインポートすることにより、複数のユーザー コントロールの XAML を整理することができました。

<ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="MyFirstControl.xaml" />
        <ResourceDictionary Source="MySecondControl.xaml" />
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

マージされた辞書サポートを導入する Silverlight 3 ベータ版が利用可能になったことで、Silverlight ユーザー コントロールで同じことが可能になるように思われました。しかし、マージされたディクショナリ ファイルに対するビルド アクションのすべての組み合わせと、generic.xaml 内のソース参照の対応する構文を試してみたにもかかわらず、うまく動作しないようです。

他の誰かが試しましたか?それが可能かどうか、そしてもしそうなら私が間違っていることを誰かが知っていますか?


OK - 多数のテスト プロジェクトの後、WPF で動作するサンプルを取得し、XAML と C# のコードを Silverlight 3 に移行しましたが、それでも失敗しました。すべての Silverlight 2 ビットとすべての Silverlight 3 ベータ ビットを完全にアンインストールして再インストールし、ついに物事が機能しました。

どういうわけか、ベータ版のインストールに失敗したとしか思えません。わかりませんが、明らかにバージョン 3 ランタイムがインストールされているにもかかわらず、まだ Silverlight 2 ランタイムで実行しているように見えました。

物事を調べて SL3 チームに確認してくれた Jared に感謝します...そして、同じマシンで Silverlight 2 と 3 を実行するための手順とバッチ ファイルを作成してくれたAmy DullardShawn Wildermuthに感謝します。

4

3 に答える 3

12

ユーザーコントロールで次のことを試したところ、うまくいきました:

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="ResourcesA.xaml" />
            <ResourceDictionary Source="ResourcesB.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>
<StackPanel>
    <Rectangle Width="100" Height="100" Fill="{StaticResource ResAColor}" />
    <Rectangle Width="100" Height="100" Fill="{StaticResource ResBColor}" />
</StackPanel>

しかし、特にgeneric.xamlについて言及しています。どのような問題がありますか?

- 編集

追加のコメントに基づいて、SL3 チームと話し、次の回答を得ました。

リソースとしてコンパイルされたgeneric.xamlを使用し、完全なリソース構文を使用して、私にとってはうまくいきます。generic.xaml のソースに相対 URI を使用できないというバグがあります (31783) が、非相対形式は問題なく動作するはずです。

<ResourceDictionary Source='/SilverlightClassLibrary1;component/CustomControl.xaml'/>

generic.xaml で、generic.xaml と CustomControl.xaml の両方のビルド アクションを Resource に変更します。問題が解決しない場合はお知らせください。再現版があれば、確認できます。

それは役に立ちますか?

于 2009-03-27T15:49:54.863 に答える
1

MySecondControl.xaml使用する順序のリソースをgeneric.xamlのResourceDictionaryに追加する場合MyFirstControl.xamlは重要ではありません。MyFirstControl.xamlに冗長に含める必要がありますMySecondControl.xamlMySecondControl.xaml含まれている必要があります:

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source='/MyControls;component/Themes/MyFirstControl.xaml'/>
</ResourceDictionary.MergedDictionaries>
<!-- ... Contents of MySecondControl.xaml -->
于 2011-04-14T20:41:37.257 に答える
0

私はちょうどこの問題を解決しました。ResourceDictionaries は MergedDictionaries をサポートしますが、Generic.xaml を使用するカスタム テンプレート コントロールの場合、Generic.xaml は MergedDictionaries をサポートしません。そのため、2 つの選択肢があります。(1) すべてのテンプレートを Generic.xaml に追加します。または (2) YourOwnDictionary.xaml を作成し、個別の辞書をすべて YourOwnDictionary.xaml にマージし、ユーザー コントロールとページから YourOwnDictionary.xaml を参照します。これは、マージされた辞書をサポートしていない以前の Silverlight バージョンの機能/バグのようです。

于 2012-01-09T01:08:45.260 に答える