2016-07-05 3 views
0

„Blend-Setup von Visual Staaten basierend auf minWindowWidth sagen wir es einfach macht. Aber es wäre sehr schön für TextBlock Elemente definiert zustandsbasierte Stile zu haben, sagen mit tag="header", tag="body" und haben Der Setter ändert den Style automatisch. "einen Stil ändern auf Basis von Visual Staat

Vielleicht war ich nicht explizit genug in meiner ersten Frage, lass mich das umformulieren.

Ich ändere mein Anwendungsfenster von Landscape zu Portrait. Mein VisualStateManager verfügt über Setter, die die Seiteneigenschaften basierend auf der neuen Mindestbreite anpassen.

Ich habe mehrere TextBlocks (Header, Body, etc) und andere Steuerelemente mit .Text (ToggleSwitch), die FontSize automatisch basierend auf der neuen Breite anpassen soll.

Abgesehen von der manuellen Einstellung jedes einzelnen Steuerelements über den Namen in allen Zuständen gibt es eine Möglichkeit, den VisualStateManager automatisch für jeden "Typ" von Text (body/header/etc) ausführen zu lassen? Meine Arbeit im Moment ist DataBind einen Style für jedes .Text-Steuerelement und lassen Sie das ViewModel die Skalierung durchführen. Das funktioniert, aber das ist wirklich etwas, für das Blend gemacht wird, oder? Also muss ich die offensichtliche Art vermissen, die jeder benutzt.

Danke für all die guten Kommentare bisher.

 <VisualStateManager.VisualStateGroups> 
     <VisualStateGroup x:Name="VisualStateGroup"> 
      <VisualState x:Name="PhonePortrait"> 
       <VisualState.StateTriggers> 
        <AdaptiveTrigger MinWindowWidth="{StaticResource NarrowMinWidth}"/> 
       </VisualState.StateTriggers> 
       <VisualState.Setters> 
        <Setter Target="SwitchStackPanel.(StackPanel.Orientation)" Value="Vertical"/> 
        <!-- Setter to change all Body textblocks to FontSize=8--> 
        <!-- Setter to change all Header textblocks to FontSize=10--> 
        <!-- Setter to change all ToggleSwitch.Text to FontSize=8--> 
        <!-- etc..--> 
+2

vielleicht ist es nur ich, aber ich verstehe nicht, was Sie zu erreichen haben. Vielleicht würde ein Codebeispiel helfen ... – AlexDrenea

+1

Ein Stil muss nicht auf alle TextBlocks zielen ... Wenn Sie dem Stil ein 'x: Key' geben, wird er nur auf Steuerelemente angewendet, die explizit' Style = {StaticResource } '. Sie können separate Stile für "Header" und "Body" erstellen und dann diese Stile nur auf die TextBlocks anwenden, die ähnlich aussehen sollen. –

+0

WPF und UWP sind zwei verschiedene Geschichten. Das XAML UI-Framework in UWP ist auch nicht das gleiche wie in WPF. Bitte klären Sie, welchen Rahmen Sie verwenden. Für WPF verwenden Sie bitte [tag: wpf] und [tag: xaml] und für UWP ist die Verwendung von [tag: uwp] und [tag: uwp-xaml] besser. Außerdem habe ich auch mit dem verwechselt, was Sie erreichen wollen. Entspricht die Antwort von Ginger Ninja Ihren Anforderungen? Seine Antwort funktioniert in WPF. Für die UWP-App möchte ich wissen, ob dieser 'TextBlock' als Element von' ListBox' oder 'ListView' verwendet wird? –

Antwort

1

Sie könnten einen globalen Stil verwenden. Dies verwendet Trigger basierend auf der Tag.

<Style TargetType="{x:Type TextBlock}"> 
    <!--Default Setters Here--> 
    <Setter Property="Background" Value="White"/> 
    <Style.Triggers> 
     <Trigger Property="Tag" Value="body"> 
      <Setter Property="Background" Value="Gray"/> 
      <!--Insert desired state setters here--> 
     </Trigger> 
     <Trigger Property="Tag" Value="header"> 
      <Setter Property="Background" Value="DarkGray"/> 
      <!--Insert desired state setters here--> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

Sie können dann einen Standardzustand haben, und Ausgelöst-Setter als nur einen Textblock beeinflussen, wenn ein anwendbarer-Tag angebracht ist.

Wenn Sie bereits andere Stile haben oder einen Auswahlprozess haben möchten, können Sie einen Schlüssel hinzufügen und dann BasedOn innerhalb des Stils verwenden.

+0

Auf diese Weise sollten Sie auch in der Lage sein, das Tag dynamisch zu ändern und den Stil automatisch ändern zu lassen. Anstatt {StaticResource MyStyle} explizit festzulegen und den Style zurücksetzen zu müssen. –