2012-03-16 105 views
0

我想修改我的項目的默認控件模板。對於我的第一個更改,我只想爲每個主題中的listview的ScrollViewer建立一個名稱。如何修改默認控件主題?

這是我的結構: MyControlLibrary:定義了一對控件並定義了標準wpf控件的主題。 MyApplication:使用控制庫和包含的主題。

這是我到目前爲止所瞭解到的。 從以下主題下載默認主題:http://archive.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=wpfsamples&DownloadId=7812

將下載的主題添加到MyControlLibrary中的主題文件夾,添加了必要的引用,並修改了引用該程序集的xmlns:theme命名空間。

從這裏,我還沒有想出下一步該做什麼。如果只是覆蓋模板,這並不難,但我希望應用程序仍然是主題感知。

在此先感謝

編輯: 好吧,我發現這個解決方案。我希望這可以幫助別人。

更新您的App.xaml

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="{ThemeDictionary AssemblyName=AssemblyWithThemes}"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
    <!-- other styles go here --> 
</Application.Resources> 

其中AssemblyWithThemes是包含主題\文件夾中的主題文件集的名稱。我相信程序集也需要從您的應用程序中引用。

非常重要的是,如果直接在App.xaml文件中包含額外的資源,請將它們放置在註釋所在的位置,否則包含的ResourceDictionary將成爲另一個資源,而不是設置Application.Resources屬性。

然後,所有其他樣式都需要指定BasedOn屬性以保留主題更改。對於動態創建的窗口,我使用了新的Style(Type),並防止使用被覆蓋的主題。更改爲新的樣式(類型,樣式)後,它完美運行。

+0

請將解決方案作爲答案發布在底部,而不是將其編輯到您的問題中,以便您可以標記答案。 – BoltClock 2012-03-19 20:13:46

回答

0

好吧,我找到了解決方案。我希望這可以幫助別人。

更新您的App.xaml

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="{ThemeDictionary AssemblyName=AssemblyWithThemes}"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
    <!-- other styles go here --> 
</Application.Resources> 

其中AssemblyWithThemes是包含主題\文件夾中的主題文件集的名稱。我相信程序集也需要從您的應用程序中引用。

非常重要的是,如果直接在App.xaml文件中包含額外的資源,請將它們放置在註釋所在的位置,否則包含的ResourceDictionary將成爲另一個資源,而不是設置Application.Resources屬性。

然後,所有其他樣式都需要指定BasedOn屬性以保留主題更改。對於動態創建的窗口,我使用了新的Style(Type),並防止使用被覆蓋的主題。更改爲新的樣式(類型,樣式)後,它完美運行。