gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 11:45:58 32 4
gpt4 key购买 nike

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

 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 设置为 True,将自动应用 On 状态。这是因为在 ToggleSwitchdefault style 中的 ToggleStates 视觉状态组内,有一个 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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com