如何在XAML中使用Setters设置默认样式?

3
通过 VisualState Setter,如何将控件恢复为其默认样式?
        <VisualStateGroup>
            <VisualState>
                <VisualState.StateTriggers>
                    <pbixaml:DeviceTypeTrigger DeviceType="Other"/>
                </VisualState.StateTriggers>
                <VisualState.Setters>
                    <Setter Target="flip.Style" Value="{x:Null}"/>
                </VisualState.Setters>
            </VisualState>
        </VisualStateGroup>

我曾试过使用null,但并没有起作用(实际上被忽略了)。我该怎么做?

2个回答

3
您可以将一个空的样式分配给控件(有点像黑客...):
<VisualStateGroup>
   <VisualState>
      <VisualState.StateTriggers>
         <pbixaml:DeviceTypeTrigger DeviceType="Other"/>
      </VisualState.StateTriggers>
      <VisualState.Setters>
         <Setter Target="flip.Style">
             <Setter.Value>
                 <Style TargetType="FlipView"/>
             </Setter.Value>
         </Setter>
      </VisualState.Setters>
   </VisualState>
</VisualStateGroup>

但我建议你做相反的事情,只在需要的状态下设置样式,而不是在不需要的状态下清除样式。

<VisualStateGroup>
   <VisualState>
      <VisualState.StateTriggers>
         <pbixaml:DeviceTypeTrigger DeviceType="[AllKnown]"/>
      </VisualState.StateTriggers>
      <VisualState.Setters>
         <Setter Target="flip.Style" Value="[What you usually want]"/>      
       </VisualState.Setters>
   </VisualState>
</VisualStateGroup>
..
..
<FlipView .... />   <!-- do not set style here ->

以这种方式,当[AllKnown]设备类型未激活时,样式会被视觉状态管理器清除。

1
为了将任何VisualState setter重置为默认值,请使用空字符串。
    <VisualStateGroup>
        <VisualState>
            <VisualState.StateTriggers>
                <pbixaml:DeviceTypeTrigger DeviceType="Other"/>
            </VisualState.StateTriggers>
            <VisualState.Setters>
                <Setter Target="flip.Style" Value=""/>
            </VisualState.Setters>
        </VisualState>
    </VisualStateGroup>

使用默认值,我指的是在您的XAML代码中设置的样式:
<FlipView x:Name="flip" Text="Test" />

在此处,您的VisualState将恢复为默认的内置Windows样式。
<FlipView x:Name="flip" Style="{StaticResource MyGreenStyle}" Text="Test" />

在这里,您的VisualState将恢复使用MyGreenStyle之前的任何其他样式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接