2015-09-02 149 views
3

在我的wpf應用程序中,我想對所有文本框進行樣式設置。結果我的App.xaml看起來像:WPF創建樣式時不會覆蓋默認樣式

<Application x:Class="IM.WindowsApp.App" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      StartupUri="MainWindow.xaml"> 
    <Application.Resources> 

     <Style TargetType="{x:Type TextBox}"> 
      <Setter Property="Foreground" Value="Yellow"/> 
     </Style> 

    </Application.Resources> 
</Application> 

在MainWindow.xaml我:

<TextBox Text="Some Text" /> 

當我運行它的偉大的文本顯示黃色,就像我的預期。

現在,這裏是我的問題

現在我想一些額外樣式添加到該文本框。因此,我修改我的代碼看起來像

<TextBox Text="Some Text"> 
    <TextBox.Style> 
     <Style TargetType="{x:Type TextBox}"> 
      <Setter Property="Opacity" Value=".8" /> 
     </Style> 
    </TextBox.Style> 
</TextBox> 

當我跑我的文本框的前景不是黃色更多:(。我不想更換風格。

一個解決方案將是給原有的風格的資源鍵。然後,我可以把BasedOn={StaticRecource MyResourceKey},這不是一個解決方案,因爲我將不得不增加Style="{StaticResource MyResourceKey}"在我的應用程序了所有的文本框,我會想避免這樣做。

回答

4

你可以用' BasedOn'style without x:Key like this

<TextBox Text="Some Text" > 
      <TextBox.Style> 
       <Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}"> 
        <Setter Property="Opacity" Value=".8" /> 
       </Style> 
      </TextBox.Style> 
     </TextBox> 
+0

沒有工作:(。我認爲它的工作似乎是一個很好的解決方案。 –

+0

嗯..這是很奇怪的。我爲此創建了一個新項目,它適用於我。首先嚐試在空項目中做到這一點,也許你有另一種覆蓋前景的樣式。 – AntonS

+0

我創建了一個基礎樣式'