7

アプリのリソースを別のDLLに保持し、App.xamlで次のようなものを使用してメインEXEでそれらを参照します:-

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="pack://application:,,,/MyThemesAssembly;component/Themes/Generic.xaml"/>
</ResourceDictionary.MergedDictionaries>

メインのEXEプロジェクトにあるウィンドウを編集すると、VS2010デザイナーは他のアセンブリからのリソースを認識しないため、スタイルが適用されていません(XAMLビューで常に作業しているため、実際には問題ありません)。ただし、Resharperはこれらの外部リソース名も認識しないため、XAMLを編集しているときに、リソース名の下に多くの波線が発生します。

上記のXAMLを各ウィンドウとユーザーコントロールに含めることで、VSデザイナーとResharperの両方を修正できることがわかりましたが、これはメモリやパフォーマンスに悪影響を及ぼしますか?各ウィンドウはリソースの個別のコピーを取得しますか?

4

3 に答える 3

3

各 UserControl / View で参照される ResourceDictionaries の使用に関して、アプリケーションで問題が発生しました。私はそれに対して忠告します。SharedResourceDictionaries を使用することで、アプリケーションのメモリ フットプリントを 300 MB ほど削減することができました。アプリケーション内の UserControl ごとに ResourceDictionary が 1 回インスタンス化されることになるようです。VSデザイナーを修正するためだけにそれをしないでください。

于 2012-11-01T15:16:16.813 に答える
2

VS2012を使用してみてください。

外部アセンブリからリソースディクショナリをマージするために使用していたテストプロジェクトがあり、app.xamlには次のものがあります。

<Application x:Class="WpfPackDictionaries.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="pack://application:,,,/WPFCommonLibrary;component/Vectors/Vectors.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

次に、mainwindow.xamlに、パスがModizablePathStyleというスタイルでプルする場所があります。

<Window xmlns:Control="clr-namespace:WPF.Common.Control;assembly=WPFCommonLibrary"  x:Class="WpfPackDictionaries.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">

    <Grid>
        <Path Style="{StaticResource ModifiablePathStyle}" Fill="Red"/>
        <Control:Jabberwocky />
    </Grid>
</Window>

Intellisense / Resharper(V7.1 10/31(Early Access Build))はスタイルを認識し、波線はありません。

ここに画像の説明を入力してください

したがって、VS2012で作業しようとしましたか?

于 2012-11-01T13:36:02.247 に答える
2

VS XAML デザイナーがデザイン時にコードを読み込んで実行するため、VS2012 はリソースを「見る」ことができるため、VS は実行時に利用できるリソースを調べることができます。ReSharper はデザイン時のコード実行を使用しないため (これにはコードが常にコンパイル可能な状態である必要があるため)、XAML サポートはもう少し複雑なタスクになりました。

ReSharper 8.0 は、BAML デコンパイルのサポートを実装し、XAML ファイルのリストを抽出して、参照されたバイナリ アセンブリから XAML リソースを解決します。

于 2012-11-02T15:06:09.903 に答える