2016-04-08 12 views

Antwort

0

Sie Styles im Resource des definieren Elternkontrolle. Der in Window.Resources definierte Style gilt für alle Rechtecke, da er keinen Key angibt. Daher ist das Rectangle im ersten StackPanel gelb und klein. Das zweite StackPanel definiert seine eigenen Ressourcen, die seine Kinder verwenden, und sie enden mit verschiedenen Farben und einer größeren Größe. Es gibt auch Stil Erbe dort mit BasedOn

<Window x:Class="GBTest.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-GBTest" 
    mc:Ignorable="d" 
    Title="MainWindow" 
    Height="350" 
    Width="525"> 
<!--Default style defined in the Window Resources--> 
<Window.Resources> 
    <Style TargetType="Rectangle"> 
     <Setter Property="Width" 
       Value="100" /> 
     <Setter Property="Height" Value="100" /> 
     <Setter Property="Fill" 
       Value="Yellow" /> 
    </Style> 
</Window.Resources> 
<StackPanel> 
    <Rectangle /> 
    <StackPanel> 
     <!--The styles defined in the resources of this StckPanel will apply to its children, overriding the default style defined in the Window Resources--> 
     <StackPanel.Resources> 
      <Style TargetType="Rectangle" 
        x:Key="BigStyle"> 
       <Setter Property="Height" 
         Value="200" /> 
       <Setter Property="Width" 
         Value="200" /> 
      </Style> 
      <Style TargetType="Rectangle" 
        x:Key="RedStyle" 
        BasedOn="{StaticResource BigStyle}"> 
       <Setter Property="Fill" 
         Value="Red" /> 
      </Style> 
      <Style TargetType="Rectangle" 
        BasedOn="{StaticResource BigStyle}" 
        x:Key="BlueStyle"> 
       <Setter Property="Fill" 
         Value="Blue" /> 
      </Style> 
     </StackPanel.Resources> 

     <Rectangle Style="{StaticResource RedStyle}" /> 
     <Rectangle Style="{StaticResource BlueStyle}" /> 
    </StackPanel> 
</StackPanel> 

+0

Vielen Dank für Ihre Wiederholung, während dies den Job erledigen würde, bedeutet dies immer noch, dass ich Stile im Steuerelement selbst definiere. Ich möchte Stile und Steuerelemente vollständig getrennt haben. Ein bisschen wie CSS wo ich alles in einer separaten Datei definiere. Deshalb dachte ich, die Style.Resources wären nett. – NicolasL

1

Wenn Sie die Stile in separaten Blättern wollen (die Sie sollten. Ich die Stile in der Kontrolle zeigte sich, weil ich falsch gelesen und dachte, das ist, was man wollte) Sie können einen Ressourcenordner erstellen und verschiedene ResourceDictionaries hinzufügen. Persönlich erstelle ich normalerweise ein separates Wörterbuch für Pinsel, Stile, Vorlagen und Konverter. Dann können Sie sie in den ResourceDictionary.MergedDictionaries in App.xaml erklären

<Application 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
RequestedTheme="Light"> 
<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="/Resources/Brushes.xaml" /> 
      <ResourceDictionary Source="/Resources/Styles.xaml" /> 
      <ResourceDictionary Source="/Resources/Converters.xaml" /> 
      <ResourceDictionary Source="/Resources/Templates.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 

+0

Sorry für Unklarheiten, ich bin neu bei Xaml, diesen Teil verstehe ich. Nehmen wir Ihre Styles.xaml in MergedDictionaries, wie würde ich Stile für ein benutzerdefiniertes Steuerelement und seine Untersteuerungen definieren. Nehmen wir Ihr früheres Beispiel mit dem StackPanel, stelle ich mir vor, Sie hätten einen Style mit StackPanel als TargetType und legen dann den Style auf dem StackPanel als StaticResource fest, aber was ist mit den darin definierten Rechtecken? Mit Style.Resources würde ich in der Lage sein, eine Style-Hierarchie für ein benutzerdefiniertes Steuerelement in meiner Styles.xaml zu bekommen, aber es gibt keine in UWP und das ist was ich will. Vielen Dank für Ihre Zeit. – NicolasL