2017-02-08 7 views
1

カスタムコントロールライブラリの動的リソースのデフォルト値を保存する方法はありますか?WPFのデフォルトDynamicRessource値

カスタムコントロールライブラリを作成したので、Generic.xamlファイルにある既定のスタイルを使用します。この「デフォルトスタイル」では、動的リソースマーカーへの参照が使用されます(この例を参照)。

<Style TargetType="{x:Type local:BorderlessWindow}"> 
    <Setter Property="Foreground" Value="{DynamicResource ForegroundColor}" /> 
    <Setter Property="Background" Value="{DynamicResource BackgroundColor}" /> 
    <Setter Property="TitleBackground" Value="{DynamicResource AltBackgroundColor}" /> 
    <Setter Property="Template" Value="{StaticResource DefaultBoderlessWindowTemplate}" /> 
</Style> 

すべてが、私は新しいプロジェクトで私のカスタムコントロールライブラリへの参照と、この新しいプロジェクトで動的なリソースマーカーを追加app.xamlが、私はこれを行わない場合の値が空の場合は正常に機能しています。

だから、何らかの種類のデフォルト値が必要です。言い換えれば、

"{DynamicResource ForegroundColor}の値をとるか、またはこれが青色でない場合。"

私は、Generic.xaml(MergedDictionary)にデフォルト値を追加するだけだと思っていましたが、これはジョブを実行しません。誰にも解決策がありますか?

私が考えることができる唯一の解決策は、dynamicResourceマーカーをコンクリート(デフォルト)値(たとえば青、緑、黒)に置き換えて、「消費」アプリでリソースを処理することです。

+0

リソースビジュアルツリーに従います。したがって、コントロールにリソースがある場合はそれが使用されているリソースです。リソースが存在しない場合は、リソースのツリーをさらに上にします。あなたのリソースが存在しない場合は、デフォルトとして使用されます。 – MikeT

+0

誰かがそれらをやっていない場合、それらのステップ(参照を追加し、何らかの形でリソース辞書を追加する)が必要です。これらをライブラリのドキュメント(readme.txt)に追加することはできますが、それだけで必要なことはすべてあります。実際にヒントを与える必要がある場合は、 'DynamicResource'の代わりにカスタム' MarkupExtension'を作成することができます。ここで、xamlがロード/解析されたときのリソースの可用性をチェックします。残念ながら、私はすぐに時間がありません今日このアプローチをテストしてください。 – Sinatr

+0

こんにちは、あなたの返信ありがとうございます。私はSinatrのような何らかのドキュメンテーションでそれを解決すると思います。 ファイルについて、DefaultApp.xamlと呼ぶことができると思います。すべてのデフォルトのDynamicResourcesをこれに入れます。また、Buildpathに公開して、誰もがこのファイルを使用し、必要なリソースを確認できるようにします。 – Bado

答えて

0

InitializeComponentの後、必要なリソースが見つかったかどうかを確認し、そうでない場合はデフォルトを追加できます。

public MainWindow() 
    { 
     InitializeComponent(); 

     try 
     { 
      var resource = FindResource("ForegroundColor"); 
     } 
     catch (ResourceReferenceKeyNotFoundException) 
     { 
      Resources.Add("ForegroundColor", new SolidColorBrush(Colors.Red)); 
     } 
    } 
+0

こんにちは、いいアイデアだけど、他の誰かが私の図書館を使い、この資料について何も知らないのはどうなのでしょうか?たぶん私はカスタムライブラリ自体であなたのアプローチを使用することができます。私はこれを試してみましょう:) – Bado

+0

FrameworkElementをメソッドのパラメータとして渡した場合、なぜできなかったのか分かりません。 public void LoadResourceDefaults(FrameworkElement frameworkElement) –

0

あなたは

https://wangmo.wordpress.com/2007/09/27/themesgenericxaml/

Why is my style in Generic.xaml not working?

はあなたcontroldefaultのスタイルを定義する方法世話をすることがわかり、複雑な問題である

あなたが置く場所それらすべてがうまく構造化されている場合は、ESあなたが(一般にnormaly)あなたのカラースキームを含めた\ generic.xaml

チェック

assemblyinfoなど

、それはにあなたのデフォルトの色を取る必要がありますカスタムコントロールアセンブリ

または単にちょうどapp.xaml

<ResourceDictionary Source="pack://application:,,,/Client.Core;Component/themes/generic.xaml"/> 
にアセンブリからあなたのジェネリックを含めます
+0

また、http://wpftoolkit.codeplex.com/のようなよく知られているコンポーネントライブラリをチェックすることもできますが、前の回答のようなコードではありません。 – GCamel

関連する問題