2012-05-16 116 views
1

相關問題的一些信息: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://stackoverflow.com/questions/2370809/wpf-how-to-override-an-application-wide-style-on-textblocks-on-specific-places),可能適用。 – Grokodile

+0

偉大的提示,但類似於第一個解決方案,在這種情況下,我們不需要重寫所有模板,只需查找子內容提供者即可添加對自己的資源字典的引用。 – trimeyko

回答

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這給我留下的默認字體大小,而不是。

+0

我不想修改應用資源,因爲它的第三方主機應用程序;) – trimeyko

相關問題