有没有办法忽略的应用程序资源contentpresenter

问题描述:

相关问题的一些信息:http://www.11011.net/archives/000692.html有没有办法忽略的应用程序资源contentpresenter

具体情况是:有一些通用的文本块(关键字等于输入)样式的App.xaml这是在第三方声明应用程序,他们在我的视图中被所有contentpresenters使用,忽略了我自己的样式。

我发现一些可能的解决方案:

  1. 明确指定的所有元素风格,被覆盖的模板&添加资源字典,我的样式contentpresenter资源。

  2. 添加的DataTemplate字符串,但与访问文本检测的一个问题(可以通过将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> 
+0

你见过[这个问题],(http://*.com/questions/2370809/wpf-how-to-override-an-application-wide-style-on-textblocks-on-specific-places),可能适用。 – Grokodile

+0

伟大的提示,但类似于第一个解决方案,在这种情况下,我们不需要重写所有模板,只需查找子内容提供者即可添加对自己的资源字典的引用。 – trimeyko

不知道,你可能会做它,因为我不明白你的应用程序的结构,但如果你想从删除样式应用程序资源,你可以做到这一点编程这样

/// <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这给我留下的默认字体大小,而不是。

+0

我不想修改应用资源,因为它的第三方主机应用程序;) – trimeyko