マージされた辞書から動的リソースが適用された後に継承された値にリセットされるTextBlockの前景が適用されます。

StackOverflow https://stackoverflow.com/questions/5985864

質問

edit :私はこのアプリケーションの非常にストリップダウンバージョンでこれを再現することができました。これが.zipファイルへのリンクです

http://www.mediafire.com/?cn918gi15uph1xe

モジュールは2つの異なる領域にビューを追加しています - 上部に沿ったステータスバー領域は、問題が発生している場所です。奇妙な部分は、メイン領域に同じビュータイプが追加された場合、問題はない。ステータスバー領域はItemsControlで、メインリージョンはContentSpresenterです。それが唯一の違いです。

あなたが洞察を持っているかどうか私に知らせてください!ありがとう。

-----オリジナルポスト-----

こんにちは、

WPFでの奇妙な行動を見ています。私は.NET 4とプリズムV4を使用しています。私たちのアプリケーションを構築する方法は、スキンリソース辞書が独自のアセンブリに存在することです。モジュールはこのアセンブリを参照しません - 代わりに、私たちが望むスキンファイルから読み取るSkin Managerクラスがあり、適切なコンポーネントをマージされた辞書にロードします。マージされた辞書はアプリケーションリソースに設定されています(Application.Resources.MergedDictionariesをクリアする前に)。このアイデアは、必要に応じて実行時にスキンを実行時に切り替えることができ、モジュールは実行時までスキンについて知る必要はありません。

その後、XAMLでは、DynamicResourceを使用してスタイルを参照しています。問題は、肌に定義され、などのキーによって参照されたテキストブロックスタイルと関係があります。

<TextBlock Style="{DynamicResource someKey}" ... />
.

スタイルはフォントファミリ、フォントサイズ、および前景線を定義します。フォントファミリとサイズは正しく適用されます(これを検証しました)。しかし、前景は常に黒です。私はSnoopとWPFのインスペクタを使用して、フォアグラウンド値がスタイルから来る代わりに「継承」されていることを確認しました。

私はTextBlockから継承するコントロールを持っていて、それがすべてのプロパティを追加するプロパティをいくつか追加します(これはまったくスタイルには影響しません)。 Foregroundプロパティのオーバーライドを変更したプロパティを追加することができ、スタイルの前景値が適用され、その後継承された値が適用されます。私は.NETソースのデバッグが機能することができませんでしたので、2回目から呼ばれているのか/どこから呼び出されていたのかを理解できませんでした...

これは、まったく同じ問題を持つ男からの古い古い投稿へのリンクです - 彼は答えを見つけられませんでしたが、その代わりに回避策です。残念ながら、回避策は継承されたコントロールに対してのみ機能します(私はTextBlocksの継承ベハビリオを設定できません)。

http:// social.msdn.microsoft.com/forums/en-us/wpf/thread/3501ed19-ab4ED/3501ED19-AB40-4064-81B5- e9B7B9D35B56

役に立ちましたか?

解決 2

問題が存在する理由は説明しませんが、ここで修正が見つかりました:

http://compositewpf.codeplex.com/discussions/257596

シェルへのビューを作成/追加する前にスキンをロードすることです。

他のヒント

私の推測は、TextBloundプロパティがTextBlock Instansに明示的に設定しない限り、Foregroundプロパティがその親から継承されていることです。たとえば、このTextBlockが青のフォアグラウンドを持つようにするウィンドウまたはUserControlを変更した場合は、それが機能しますか?ForegroundをColorに設定するのではなく、行うことができるのはスタイルにあります。それがうまくいくかどうかを確認してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top