c# - 如何设置 UWP 元素的状态?

标签 c# xaml uwp uwp-xaml windows

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

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

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

这可以通过 UWP 实现吗?

最佳答案

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

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

但不要这样做。因为这只在视觉上设置状态,所以底层的IsOn属性仍然是False.

实际上,通过将 IsOn 设置为 TrueOn 状态将自动应用。这是因为在 ToggleSwitchdefault styleToggleStates 视觉状态组内。 ,有一个 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>

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

关于c# - 如何设置 UWP 元素的状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44857010/

相关文章:

c# - 每种语言的 sitecore 中最受欢迎的项目。

c# - 无法加载 DLL ' mydll.dll' : The specified module could not be found

c# - Winforms 测试应用指南

c# - 通过 .NET 使用 uTorrent Web API

c# - 是否可以在 XAML 中声明类型别名?

c# - 如何在通用 Windows 中更新通知

c++ - UWP - ListView 绑定(bind)不显示在 C++/CX 中的 XAML 上

wpf - 如何将多个 PATH 对象组合成可用作 WPF/XAML 中的样式的矢量图像

c# - 如何进行 XAML 布局 - 堆栈面板中的居中项目

c# - x :Bind Converter and FallbackValue not collaborating (UWP 10)