【问题标题】:Is there any way to ignore application resources in contentpresenter有什么方法可以忽略 contentpresenter 中的应用程序资源
【发布时间】:2012-05-16 15:02:41
【问题描述】:

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

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

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

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

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

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

P.S.:已经存在很多视图,所以第一个选项是很多工作!

重现创建新的 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>

【问题讨论】:

  • 你见过this question,可能适用。
  • 很好的提示,但类似于第一种解决方案,在这种情况下,我们不需要覆盖所有模板,只需查找子 contentpresenters 即可添加对自己资源字典的引用。

标签: c# wpf inheritance styling


【解决方案1】:

由于我不了解您的应用程序的结构,因此不确定您可以在哪里执行此操作,但如果您想从应用程序资源中删除样式,您可以像这样以编程方式执行此操作

/// <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

【讨论】:

  • 我不想修改应用资源,因为它的第三方宿主应用;)
猜你喜欢
  • 2022-11-19
  • 1970-01-01
  • 2015-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多