2016-07-05 120 views
0

「混合簡化了基於發言權minWindowWidth設置可視狀態,但是這將是非常好的,有TextBlock元素定義的基於狀態的樣式,說有tag="header"tag="body",並有Setter自動更改樣式。「更改樣式

也許我是不是在我最初的問題明確不夠,讓我重複這一點。

我從說景觀調整我的應用程序窗口肖像。我的VisualStateManager具有根據新的最小寬度調整頁面屬性的設置器。

我有多個的TextBlocks(標題,正文等)並用。文本(ToggleSwitch)其他控件,我想要基於新的寬度來自動調節字號。

除了按名稱在所有狀態手動設置的每一個控制,是有辦法有VisualStateManager做自動爲每個文本(體/報頭/等)的「類型」?此刻我的工作是爲每個.Text控件創建一個DataBind風格,並讓ViewModel執行所有縮放。這很有效,但這確實是Blend製作的,對嗎?所以我必須錯過每個人都在使用的明顯方式。

感謝所有的好意見爲止。

 <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

也許這只是我,但我不明白你在追求什麼。也許代碼示例會有所幫助... – AlexDrenea

+1

樣式不必針對所有TextBlocks ...如果您將樣式設爲'x:Key',那麼它將只應用於明確指出'Style = {StaticResource }'。您可以爲'Header'和'Body'製作不同的樣式,然後將這些樣式應用於您想要看起來類似的TextBlocks。 –

+0

WPF和UWP是兩個不同的故事。 UWP中的XAML UI框架也與WPF中的不同。所以請澄清你正在使用的框架。對於WPF,請使用[tag:wpf]和[tag:xaml],對於UWP,使用[tag:uwp]和[tag:uwp-xaml]更好。此外,我也混淆了你想達到的目標。姜忍者的答案是否符合你的要求?他的答案在WPF中有效。對於UWP應用程序,我想知道這個'TextBlock'是否被用作ListBox或ListView的項目? –

回答

1

您可以使用全局樣式。這使用基於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> 

然後,您可以擁有一個默認狀態,並且觸發設置程序僅在連接適用標記時影響文本塊。

如果您已經有其他風格或想有一個選擇的過程,你可能要添加一個鍵,然後在樣式中使用BasedOn

+0

這樣,您應該也可以動態更改標籤,並自動更改樣式。而不是顯式設置{StaticResource MyStyle}並且不得不重置所述樣式。 –