代码之家  ›  专栏  ›  技术社区  ›  Lenny

如何设置UWP元素的状态?

  •  2
  • Lenny  · 技术社区  · 8 年前

    我有一个按钮,其状态根据某些条件而变化。,例如,当切换按钮打开时,更改颜色、大小、启用/禁用。我的目标是封装状态,以便我们可以执行以下操作:

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

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

    这可能与UWP有关吗?

    1 回复  |  直到 8 年前
        1
  •  2
  •   Justin XL    8 年前

    您可以通过使用调用控件的特定状态 VisualStateManager 。例如,如果要手动让 ToggleSwitch 转到its On

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

    因为这只会设置状态 视觉上 ,基础 IsOn 财产仍然是 False

    实际上,通过设置 伊森 True 这个 在…上 状态将自动应用。这是因为在 ToggleStates 切换开关 default style 在…上 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>
    

    这些 伊森 真的 .该触发逻辑封装在内部 的代码。因此,当您想要为自定义控件定义自己的视觉状态时,需要手动连接状态属性(例如。 IsChecked , IsSelected , 伊森 IsEnabled )当其他人使用你的控件时,他们可以简单地更新它们,并期望应用正确的状态。