問題に関連するいくつかの情報:http ://www.11011.net/archives/000692.html
具体的な状況は次のとおりです。サードパーティのアプリにあるapp.xamlで宣言されたいくつかの一般的なテキストブロック(キーはタイプに等しい)スタイルがあり、それらは私のビューのすべてのコンテンツプレゼンターによって使用され、自分のスタイルを無視します。
私はいくつかの可能な解決策を見つけました:
オーバーライドされたテンプレートを使用してすべての要素にスタイルを明示的に割り当て、自分のスタイルを使用してリソースディクショナリをcontentpresenterリソースに追加します。
文字列のデータテンプレートを追加しますが、アクセステキストの検出に問題があります(自分のリソースへの参照を含むcontentpresenterを配置することで解決できる可能性がありますが、この問題を修正するためだけにビジュアルツリーを増やすため、適切な解決策ではありません)
おそらく他の解決策はありますか?
PS:すでにたくさんのビューが存在するので、最初のオプションはたくさんの作業です!
再現するには、新しいwpfプロジェクトを作成し、次のファイルを変更します。
App.xamlは一般的なスタイルを追加します:
<Application.Resources>
<Style TargetType="TextBlock">
<Setter Property="FontSize" Value="20"/>
</Style>
</Application.Resources>
MainWindow.xamlのコンテンツは次のとおりです。
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<StackPanel>
<Button Content="Hello world">
<Button.ContextMenu>
<ContextMenu>
<MenuItem Header="Access_Text"/>
<MenuItem Header="NormalText"/>
</ContextMenu>
</Button.ContextMenu>
</Button>
<TextBlock Text="WELCOME TO BLACK MESA"/>
</StackPanel>
Dictionary.xamlリソースディクショナリを追加し、その中に次のスタイルを追加します。
<Style TargetType="TextBlock">
<Setter Property="FontSize" Value="8"/>
</Style>