2011-01-09 32 views
7

我似乎無法爲我的應用程序中的所有窗口設置默認背景顏色。有誰知道如何做到這一點?如何爲共享ResourceDictionary中的窗口實例定義默認背景顏色?

目前我設置在我這樣的App.xaml文件的一個主題。

<Application> 
    <Application.Resources> 
     <ResourceDictionary Source="Themes/SomeTheme.xaml" /> 

這基本上樣式我的整個應用程序。

裏面的SomeTheme.xaml我想設置爲我所有的窗戶像這樣的默認顏色。

<SolidColorBrush Color="{DynamicResource MainColor}" x:Key="CommonBackgroundBrush" /> 
<Style TargetType="{x:Type Window}"> 
    <Setter Property="Background" Value="{DynamicResource CommonBackgroundBrush}" /> 
</Style> 

對於Window類型的衍生產品,此語法完全被忽略。

是否有某種方式來迫使風格適用於Window所有衍生?

這個語法奇怪的是,它實際上顯示了VS設計預覽窗口中正確的顏色。

回答

6

你的窗戶都沒有的Window情況下,他們是來自Window派生的類的實例。所以我認爲你必須把它們全部列出來,但你可以用BasedOn來幫忙。

+0

這是一個好點的任何問題......但儘管如此,必須有某種方式來設置任何導出從`Window`。實際上,XAML預覽顯示正在設置的背景。 – Nicholas 2011-01-09 20:42:17

+0

這是設計師工作方式的神器。它**不會**實例化一個`Window`,這樣你的代碼隱藏就不需要被編譯來完成設計。 – 2011-01-09 20:58:00

+0

那該死的。感謝那些信息......所以你說沒有辦法強制所有的衍生品應用他們的基類的主題? – Nicholas 2011-01-09 21:00:12

4

如果真的是沒有實際的繼承,這可能是那麼簡單,你可以把它:

<Style TargetType="{x:Type Window}"> 
    <Setter Property="Background"> 
     <Setter.Value> 
      <SolidColorBrush Color="Blue"/>   
     </Setter.Value> 
    </Setter> 
</Style> 
<Style TargetType="{x:Type local:MainWindow}" BasedOn="{StaticResource {x:Type Window}}"/> 
<Style TargetType="{x:Type local:Dialogue}" BasedOn="{StaticResource {x:Type Window}}"/> 
... 

至少你不需要複製整個風格,方式

4

給你風格x:Key

<Style x:Key="WindowStyle" TargetType="{x:Type Window}"> 

,然後在每一個窗口引用它應該適用於:

<Window x:Class="WpfApplication1.MainWindow" ... Style="{StaticResource WindowStyle}"> 
1

我是新手,所以這裏是我的5便士價值。 我改變了背景網格...不知道是否有做這種方式:)

<Style TargetType="{x:Type Grid}"> 
    <Setter Property="Background" Value="#FFECE9D8"/> 
</Style> 
相關問題