2016-07-05 131 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}并且不得不重置所述样式。 –