2

与问题相关的一些信息:http ://www.11011.net/archives/000692.html

具体情况是:在第三方应用程序中的 app.xaml 中声明了一些通用文本块(键等于类型)样式,在我看来,它们被所有内容呈现者使用,而忽略了我自己的样式。

我发现了几个可能的解决方案:

  1. 显式地为所有元素分配一个具有覆盖模板的样式并将具有我的样式的资源字典添加到 contentpresenter 资源。

  2. 为字符串添加数据模板,但访问文本检测存在问题(可以通过将 contentpresenter 与 ref 放置到我自己的资源中来解决,这不是一个好的解决方案,因为我们增加可视化树只是为了解决这个问题)

可能还有其他解决方案吗?

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,这使我的默认字体大小为12而不是20

于 2012-05-16T15:40:24.900 回答