2010-01-23 12 views
8

Mam to XAML. Jeśli usunę sekcję StackPanel.Resources, otrzymam style zdefiniowane na poziomie aplikacji. Jeśli go zostawię, otrzymam tylko nowe style.Dziedziczenie stylu WPF

Jak połączyć styl lokalny i globalny?

<Window x:Class="MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 

    <DockPanel> 
     <StackPanel DockPanel.Dock="Top" Orientation="Horizontal" > 
      <StackPanel.Resources> 
       <Style TargetType="TextBlock" > 
        <Setter Property="Margin" Value="4" /> 
       </Style> 
       <Style TargetType="Button" > 
        <Setter Property="Margin" Value="4" /> 
       </Style> 
      </StackPanel.Resources> 
      <Border Padding="5" BorderBrush="Blue" BorderThickness="4" > 
       <StackPanel> 
        <TextBlock>Applications</TextBlock> 
        <Button>Open Issues</Button> 
        <Button>Services</Button> 
       </StackPanel> 
      </Border> 
     </StackPanel> 
     <StackPanel></StackPanel> 
    </DockPanel> 
</Window> 

Jeśli to pomaga, tak zdefiniowałem style globla.

<Application x:Class="Application" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    StartupUri="MainWindow.xaml"> 
    <Application.Resources> 
     <ResourceDictionary Source="ShinyBlue.xaml"/> 
    </Application.Resources> 
</Application> 

Odpowiedz

14
To Combine the application Level + Local Resource 

w definicji zasobów lokalnych

<Style TargetType="TextBlock" BasedOn="{StaticResource StyleA}" > 
       <Setter Property="Margin" Value="4" /> 
      </Style> 

to daje styl z poziomu aplikacji, jak również na poziomie lokalnym

+0

Co jeśli styl poziomu aplikacji nie ma nazwy ? –

+0

po prostu nadajesz nazwę BaseTypeName jako "TextBlock" –

+0

Czy masz na myśli, jak