如何设置UWP元素的状态?

时间:2017-07-01 03:09:32

标签: c# xaml uwp uwp-xaml windows-applications

我有一个按钮,其状态根据某些标准而变化。例如,当切换按钮打开时,更改颜色,大小,启用/禁用。我的目标是封装状态,以便我们可以这样做:

 if (toggleButton.IsOn) btnName.state = State1;
 else btnName.state = State2;

我们在哪里定义状态1和状态2(可能在XAML中?)。

这可能与UWP有关吗?

1 个答案:

答案 0 :(得分:2)

您可以使用VisualStateManager调用某个控件的某个状态。例如,如果您想手动让ToggleSwitch进入On状态,您可以写 -

VisualStateManager.GoToState(MyToggleSwitch, "On", true);

但请勿执行此操作。因为这只会将状态设置为可视,所以基础IsOn属性仍为False

实际上,通过将IsOn设置为True,将自动应用On状态。这是因为在ToggleStates的{​​{3}}中的ToggleSwitch视觉状态组内,有一个On状态,其中有一堆Storyboard,如下所示 -

<VisualState x:Name="On">
  <Storyboard>
    <DoubleAnimation Storyboard.TargetName="KnobTranslateTransform"
                     Storyboard.TargetProperty="X"
                     To="24"
                     Duration="0" />
    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="SwitchKnobBounds"
                                   Storyboard.TargetProperty="Opacity">
      <DiscreteObjectKeyFrame KeyTime="0" Value="1" />
    </ObjectAnimationUsingKeyFrames>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="OuterBorder"
                                   Storyboard.TargetProperty="Opacity">
      <DiscreteObjectKeyFrame KeyTime="0" Value="0" />
    </ObjectAnimationUsingKeyFrames>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="SwitchKnobOn"
                                   Storyboard.TargetProperty="Opacity">
      <DiscreteObjectKeyFrame KeyTime="0" Value="1" />
    </ObjectAnimationUsingKeyFrames>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="SwitchKnobOff"
                                   Storyboard.TargetProperty="Opacity">
      <DiscreteObjectKeyFrame KeyTime="0" Value="0" />
    </ObjectAnimationUsingKeyFrames>
  </Storyboard>
</VisualState>

只要Storyboard设置为IsOn,这些True就会开始。该触发逻辑封装在ToggleSwitch的代码中。因此,当您想要为自定义控件定义自己的可视状态时,您需要手动挂接状态属性(例如IsCheckedIsSelectedIsOnIsEnabled )具有相应的状态,因此当其他人使用您的控件时,他们可以简单地更新它们并期望应用正确的状态。