2009-04-08 5 views
2

Wenn ich WPF-Anwendungen erstellen, beginnt mein XAML sehr schnell aufzublähen.Was sind Ihre Strategien, um XAML in Stile zu setzen?

Ich dann nähern Sie sich das XAML/Stil Problem in einer HTML/CSS-Methode, auf der Suche nach sich wiederholenden Code und packen es in Stile, die ich in meine Window.Resources Abschnitt.

Ist dies die Art, wie andere es tun, oder gibt es jetzt einen besseren Weg in XAML? Es scheint nur, dass die beiden Blöcke unterscheiden sich nur durch zwei kleine Worte, es scheint, dass ich es in eine Art von funktionalen Benutzersteuerung setzen könnte (das ist ein Menü auf der linken Seite), so dass wenn ich 25 Elemente in meinem Menü haben Ich könnte einfach 25 Zeilen mit den Namen und vielleicht den Click-Zielen haben.

Oder vielleicht, wenn ich diese bewegen, dieses Problem mvvm wird für sich selbst sorgen mit Databinding (es ist currrently nur hartcodierte Prototyp), so kann ich die Namen der Menüpunkte in einer Sammlung halten in meinem ViewModel und es erstellt dann das Menü dynamisch in einem ItemsControl?

Oder sind aufgeblähte XAML-Dateien nur eine Tatsache des Lebens mit WPF-Anwendungen?

Welche Art von XAML-Styling-Strategien haben Sie, wenn Sie WPF-Anwendungen erstellen?

Window.Resources (Anfang der Datei):

<Window.Resources> 
    <Style x:Key="Link" TargetType="Button"> 
     <Setter Property="Cursor" Value="Hand"/> 
     <Setter Property="Foreground" Value="#555"/> 
     <Setter Property="Background" Value="Transparent"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="Button"> 
        <TextBlock TextDecorations="Underline" 
       Text="{TemplateBinding Content}" 
       Background="{TemplateBinding Background}"/> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsPressed" Value="True"> 
          <Setter Property="Foreground" Value="Red"/> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Window.Resources> 

Aktuelle XAML:

<Expander HorizontalAlignment="Left" Header="File" VerticalAlignment="Top" ExpandDirection="Down" Width="200" Padding="2"> 
    <Expander.Background> 
     <LinearGradientBrush> 
      <GradientStop Color="#bbb" Offset="0"/> 
      <GradientStop Color="#ccc" Offset="1"/> 
     </LinearGradientBrush> 
    </Expander.Background> 
    <Border CornerRadius="5"> 
     <Border.Background> 
      <LinearGradientBrush> 
       <GradientStop Color="#ccc" Offset="0"/> 
       <GradientStop Color="#bbb" Offset="1"/> 
      </LinearGradientBrush> 
     </Border.Background> 
     <StackPanel HorizontalAlignment="Stretch" VerticalAlignment="Top"> 
      <Button Click="buttonClose_Click" 
       Style="{StaticResource Link}" 
       Margin="10 3 3 3" 
       Content="Close"> 
      </Button> 
     </StackPanel> 
    </Border> 
</Expander> 

<Expander HorizontalAlignment="Left" Header="Customers" VerticalAlignment="Top" ExpandDirection="Down" Width="200" Padding="2"> 
    <Expander.Background> 
     <LinearGradientBrush> 
      <GradientStop Color="#bbb" Offset="0"/> 
      <GradientStop Color="#ccc" Offset="1"/> 
     </LinearGradientBrush> 
    </Expander.Background> 
    <Border CornerRadius="5"> 
     <Border.Background> 
      <LinearGradientBrush> 
       <GradientStop Color="#ccc" Offset="0"/> 
       <GradientStop Color="#bbb" Offset="1"/> 
      </LinearGradientBrush> 
     </Border.Background> 
     <StackPanel HorizontalAlignment="Left" VerticalAlignment="Top"> 
      <Button Click="btnAppPage_Click" 
       Tag="CustomerAdd" 
       Style="{StaticResource Link}" 
       Margin="10 3 3 3" 
       Content="Create Customer"/> 
     </StackPanel> 
    </Border> 
</Expander> 

Antwort

1

Ganz einfach: Wiederholung identifizieren und sie in eine Kontrolle bewegen. Das Steuerelement kann alle erforderlichen Eigenschaften aufweisen, um die erforderlichen Variationen zur Laufzeit zu erstellen. Und es kann wieder neu templatiert werden, indem es eine Kontrolle ist.

+0

Ich habe UserControls zum Laden in Seiten mit Inhalt verwendet (Menü links und jede Seite ist eine Benutzersteuerung), aber nicht für kleine Wiederholungen auf der Seite, meinst du nur benutzerdefinierte Benutzersteuerelemente wie hier beschrieben: http: //msdn.microsoft.com/en-us/magazine/cc163421.aspx –

0

Sie können auch Wiederholungen identifizieren und sie in Ressourcen verschieben. Eine Ressource kann leicht auf eine andere verweisen.

Verwandte Themen