2

編集:私はこれを非常に簡素化されたバージョンのアプリケーションで再現することができました。.zipファイルへのリンクは次のとおりです

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

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

何か洞察があれば教えてください!ありがとう。

-----元の投稿-----

こんにちは皆さん、

WPFで奇妙な動作が見られます。.NET4とPRISMv4を使用しています。アプリケーションを構造化する方法は、スキンリソースディクショナリが独自のアセンブリに存在することです。モジュールはこのアセンブリを参照しません。代わりに、必要なスキンを構成ファイルから読み取り、適切なコンポーネントをマージされたディクショナリにロードするスキンマネージャークラスがあります。マージされたディクショナリは、アプリケーションリソースに設定されます(追加する前に、Application.Resources.MergedDictionariesをクリアします)。アイデアは、必要に応じて後で実行時にスキンを切り替えることができ、モジュールは実行時までスキンについて知る必要がないということです。

次に、xamlで、DynamicResourceを使用してスタイルを参照しています。問題は、スキンで定義され、キーによって参照されるTextBlockスタイルに関係しています。

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

スタイルは、フォントファミリ、フォントサイズ、および前景を定義します。フォントファミリーとサイズが正しく適用されています(これを確認しました)。ただし、前景は常に黒です。SnoopとWPFInspectorを使用して、前景の値がスタイルから取得されるのではなく、「継承」されていることを確認しました。

また、TextBlockから継承するコントロールがあり、テキスト値を決定するいくつかのプロパティを追加するだけです(スタイルにはまったく影響しません)。Foregroundプロパティのプロパティ変更オーバーライドを追加することができ、スタイルの前景値が適用され、その後、継承された値が適用されることがわかりました。.NETソースのデバッグを機能させることができなかったため、2回目から呼び出された理由/場所がわかりませんでした...

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

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/3501ed19-ab40-4064-81b5-e9b7b9d35b56

4

2 に答える 2

0

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

于 2011-05-13T01:04:57.900 に答える
0

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

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

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

于 2011-05-17T19:55:08.917 に答える