9

アプリケーションを最適化するために、SharedResourceDictionary を作成します。これにより、実行時に約 250 MB のメモリを節約できるので、うまく機能します。

私の問題は設計時にあります。Blend 4 では、自分のリソースにアクセスできなくなりました。テンプレートを変更するには (魔女は私のリソース ファイルにあります)、通常はコントロールを右クリックし、次の画像のように [テンプレートの編集] --> [現在の編集] を選択します。

ここに画像の説明を入力

テンプレートをそのように変更する必要があります。リソース ファイルに移動して適切なファイルを見つけるよりも 100 倍高速です...リソースがたくさんあります...

私の SharedResourceDictionary は次のように実装されています (Web 上にあります):

public class SharedResourceDictionary : ResourceDictionary
{
    /// <summary>
    /// Internal cache of loaded dictionaries 
    /// </summary>
    public static Dictionary<Uri, ResourceDictionary> _sharedDictionaries =
        new Dictionary<Uri, ResourceDictionary>();

    /// <summary>
    /// Local member of the source uri
    /// </summary>
    private Uri _sourceUri;

    /// <summary>
    /// Gets or sets the uniform resource identifier (URI) to load resources from.
    /// </summary>
    public new Uri Source
    {
        get
        {
            if (IsInDesignMode)
                return base.Source;

            return _sourceUri;
        }
        set
        {
            _sourceUri = value;

            if (!_sharedDictionaries.ContainsKey(value))
            {
                // If the dictionary is not yet loaded, load it by setting
                // the source of the base class
                base.Source = value;

                // add it to the cache
                _sharedDictionaries.Add(value, this);
            }
            else
            {
                // If the dictionary is already loaded, get it from the cache
                MergedDictionaries.Add(_sharedDictionaries[value]);
            }
        }
    }

    /// <summary>
    /// Check if we are in Blend to prevent error
    /// </summary>
    public bool IsInDesignMode
    {
        get
        {
            return
            (bool)
            DependencyPropertyDescriptor.FromProperty(DesignerProperties.IsInDesignModeProperty,
            typeof(DependencyObject)).Metadata.DefaultValue;
        }
    }
}

これに対する解決策があるかどうか、誰かが考えを持っていますか? この共有辞書はメモリの改善のために残しておきたいのですが、リソースを簡単に変更したいのです...

手がかりをいただければ幸いです。ありがとうございました。

編集:

これ(SharedResourceDictionary)を行うと、静的リソースにも問題があります:

Provide value on 'System.Windows.Markup.StaticResourceHolder' threw an exception.

そして、それらを動的リソースに変更すると機能します。または、SharedResourceDictionary を単純な ResourceDictionary で変更すると、それも機能します。プロジェクトはコンパイルできますが、私が言ったように、変更せずにリソースを編集することはできません。

4

2 に答える 2

1

.NET 4 用にコンパイルしていますか?

ResourceDictionaries を適切にスキャンできないというバグに遭遇している可能性があります。

App.xaml レベル (Application.Resources 内) レベルで ResourceDictionaries を追加し、ダミーの既定のスタイルを追加する必要があるという話があります。

コントロールにリソースを追加しているように見えるため、これはうまくいかない場合があります。

http://blogs.windowsclient.net/rob_relyea/archive/2010/04/26/my-staticresource-reference-worked-differently-with-wpf-4-rc-than-it-does-with-wpf-4- rtm.aspx

結合ディクショナリへの結合ディクショナリの追加

マージされたディクショナリを含むリソース ディクショナリを参照する際の問題

http://connect.microsoft.com/VisualStudio/feedback/details/553528/defaultstylekey-style-not-found-in-inner-mergeddictionaries

于 2012-07-10T11:22:38.660 に答える
0

実際、この機能を使用するのは問題があります。=(

将来的には改善されるかもしれませんが、役立つかどうかはわかりませんが、別の実装を試すことができます: WPF SharedResourceDictionary (ただし、動作することを保証するものではありません)

設計時に問題が発生したため、SharedResourceDictionary の使用を断念しました。プロジェクトが 100% 完了して初めて、使用できるようになります。

于 2012-07-07T02:57:29.790 に答える