2

問題に関連するいくつかの情報:http ://www.11011.net/archives/000692.html

具体的な状況は次のとおりです。サードパーティのアプリにあるapp.xamlで宣言されたいくつかの一般的なテキストブロック(キーはタイプに等しい)スタイルがあり、それらは私のビューのすべてのコンテンツプレゼンターによって使用され、自分のスタイルを無視します。

私はいくつかの可能な解決策を見つけました:

  1. オーバーライドされたテンプレートを使用してすべての要素にスタイルを明示的に割り当て、自分のスタイルを使用してリソースディクショナリをcontentpresenterリソースに追加します。

  2. 文字列のデータテンプレートを追加しますが、アクセステキストの検出に問題があります(自分のリソースへの参照を含む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>
4

1 に答える 1

0

アプリの構造がわからないので、どこでそれを行うのかわかりませんが、アプリケーションリソースからスタイルを削除したい場合は、このようにプログラムで行うことができます

/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        ResourceDictionary dic = App.Current.Resources;
        dic[typeof (TextBlock)] = null;
    }
}

テスト WPF プロジェクトで提供した XAML を使用すると、既定のフォント サイズが20ではなく12になります。

于 2012-05-16T15:40:24.900 に答える