问题标签 [visualstatemanager]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
627 浏览

xaml - 根据动画的“禁用”视觉状态保持Control.Opacity?

我有一个自定义按钮。

我希望当它进入“禁用”状态时,它的Opacity属性应该在大约一秒的时间范围内切换到 65% 左右,当它离开“禁用”状态时,它应该将不透明度恢复到 100% (动画)。

这是怎么做到的?

这是怎么做到的?

0 投票
1 回答
2364 浏览

wpf - WPF 使用 VisualStateManager 为面板输入和输出动画

我希望我正在尝试做的事情可以使用视觉状态......

我想要做的是有一个按钮,可以在两种状态之间切换stackPanel:“In”和“Out”。然后我会在按钮的单击事件上调用 VisualStateManager.GoToState,以在两种状态之间切换。

面板状态

我遇到的问题是我不知道如何将状态附加到 StackPanel。它不会让我使用 Expression Blend。所以我被困住了......无论如何,是否可以使用 VisualStateManager 为这个面板设置动画?(我知道我可以使用情节提要并创建进出动画,但如果可能的话,我更喜欢使用状态)

我真的希望这是可能的。否则 VisualStateManager 除了在按钮上做花哨的翻转效果还有什么好处?

谢谢你的帮助!

0 投票
1 回答
1505 浏览

silverlight - 在视觉状态之间进行动画处理,而不会出现特定过渡的爆炸式增长

我有一个似乎相当简单的场景,我试图在 Silverlight 中实现,但是尽管 Silverlight/Blend 4 中的所有令人难以置信的强大转换功能,我只是不知道如何去做。

我有一个布局可以归结为:

起初,所有四个页面网格都被隐藏并缩放到零大小,但是当您单击其相应的按钮时,页面应该会出现一个增长的动画。当您单击另一个按钮时,前一页应以缩小的动画消失,而另一页应以增长的动画出现。这样,您可以使用按钮在所有四个页面之间切换。

从我读过的内容来看,执行此操作的“正确”方法是在用户控件上使用视觉状态。所以我创建了四个状态,Page1 到 Page4,并为每个状态设置适当的页面网格来显示。然后我将命令放在按钮上以更改用户控件的视觉状态。这很好用,我可以在页面之间切换,但是当我开始尝试定义状态之间的动画时,我遇到了问题。

起初,我以为我可以为每个状态定义一个“To *”和“From *”动画。因此,当您处于 Page1 状态并单击按钮转到状态 Page2 时,它会播放“From *”动画隐藏 Page1,然后播放“To *”动画显示 Page2。但这不起作用。即使您为每个状态定义了“To *”和“From *”动画,Silverlight 也只会播放“To *”动画,而完全忽略“From *”动画!

更糟糕的是,这种行为似乎是 Silverlight 的工作方式,尽管它根本没有任何意义!这意味着如果我想让每个页面缩小,然后另一个页面在其位置增长,我将必须定义从每个状态到另一个状态的单独转换!对于我目前的四页,这意味着十二个单独的过渡,但是当我想增加页数时,这个数字会猛增。十页需要 9*9 = 81 次转换!一切都是为了缩小当前页面,并扩大新页面。

我不敢相信没有更好的方法来处理看似如此简单的场景,但我找不到任何东西似乎可以说明如何。我可能可以使用修改故事板的代码隐藏将它一起破解,但我希望允许在 Blend 中查看和编辑页面网格,而且我读到的所有内容都说要避免使用代码隐藏并使用视图模型和视觉状态来处理事情

请告诉我我遗漏了一些明显的东西?

0 投票
2 回答
3108 浏览

c# - 如何在代码中动态地将新的视觉状态添加到自定义控件模板?

是否可以在代码中以编程VisualState方式向CustomControl Template添加新的? 例如,我可以在设计时手动将此 XAML 添加到 CustomControl 模板:VisualStateManager

但是我怎么能VisualState在运行时添加一个新的呢?

0 投票
1 回答
3652 浏览

silverlight - 带图像的 Silverlight ToggleButton

我正在尝试创建一个 Silverlight Toggle 按钮样式,可以在加号和减号之间切换。不幸的是,它总是显示一个减号。谁能告诉我这种风格有什么问题:

0 投票
2 回答
236 浏览

.net - 阻止用户控件构造函数在活动选项卡更改时执行

我有选项卡控件,有两个选项卡,每个选项卡都包含一个用户控件,用户控件具有与转换一起定义的视觉状态。

我想解决的问题是,每次我更改活动选项卡时,Visual State Transition 故事板都会运行,即使控件应该已经处于某种状态并且不需要更改。

我已经跟踪到这样一个事实,即更改选项卡会导致新可见选项卡中所有子用户控件的构造函数运行。有没有办法避免这种情况?

0 投票
1 回答
572 浏览

silverlight - Silverlight 中的最佳实践触发器替代方案

MSDN 不鼓励使用EventTrigger和任何自定义触发操作,但提供了StoryBoardVisualStateManager作为替代方案。

Q1。当触发器看起来如此有用时,为什么不鼓励它们?

MSDN 的理由似乎是:

Silverlight 支持在元素上使用 EventTrigger 和 object.Triggers 属性元素,但不鼓励当前应用程序使用此技术。EventTrigger 只能支持 Loaded 事件的触发操作(您在 EventTrigger.RoutedEvent 属性中命名事件。)这使得 EventTrigger 不适用于大多数运行时交互。

那么,可以为 VSM 命名 VisualState,但不能为事件命名?两者都是可能发生变化的字符串值,那么为什么一个的命名比另一个更糟糕呢?

Q2。动画对象属性的最佳实践方法是什么,该对象的值取决于其数据上下文的属性值?

当然,VSM 和 StoryBoard 非常适合动画制作,但它们并不直接与对象的数据上下文交互,对吗?

考虑以下场景进行讨论:

Canvas Path 的边框应根据 Canvas 数据上下文的 IsSelected 属性值更改颜色和粗细。左键单击画布路径的封闭区域应切换 IsSelected 属性,该属性还应更改路径的动画并最终更改颜色和厚度。


方法一

也许我可以挂钩交互事件(即 MouseLeftButtonUp)并更新后面代码中的 IsSelected 属性值并启动 StoryBoard 或更改 VisualState 以动画 Canvas Path。虽然从动画的角度来看这可能很好,但除非我将数据上下文强制转换为某些 IIsSelectable 接口,否则它将视图与其视图模型/数据上下文强烈耦合。


方法二

也许我可以创建一个行为来切换 IISelectable(上面提到的)属性并启动 StoryBoard 或更改 VisualState。由于 Canvas 是一个控件,因此使用 VSM 而不是仅仅使用 StoryBoard 可能会更好(否则我必须以某种方式将对 StoryBoard 的引用传递给行为,也许?)。


方法 3

也许我可以将双向绑定与双转换器一起使用,以便 Canvas Path 的初始动画由 IsSelected 属性值确定,但用户交互将更改动画/VisualState,然后更新 IsSelected 属性值。如果是这种情况,我会转换 Canvas Path 的边框颜色/厚度属性,还是有办法正确转换 VisualState(与 IsSelected 的布尔值之间)?


这些只是我脑海中的一些想法。还有其他更好的做法建议吗?

0 投票
2 回答
3251 浏览

silverlight-4.0 - VisualStateManager.GotoState 在 ChildWindow 中不起作用

我的 silverlight 4 应用程序中有一个 ChildWindow,定义了 2 个视觉状态。

当我在 Blend 中预览它们时,视觉状态会做我想做的事情,但是当我调用 ViewStateManager.GotoState 时,它​​会返回 false 并且视觉状态不会转换。

这是我的 XAML。为长度道歉...

VisualStateHelper.VisualStateName 只是一个附加属性,它在值更改时调用 VisualStateManager。该属性的实现可能不是问题,因为它可以在其他地方工作。

0 投票
3 回答
1779 浏览

c# - 从 Codebehind 定义 VisualStates

是否可以在 CodeBehind 中定义(而不是切换)VisualStates?

我正在创建一个装饰器,它在OnRender. 我想做的是通过它的属性来改变这些矩形的不透明度IsMouseOver(比如从 0.3 到 0.8)。

在任何带有可视化树的控件中,我都会添加一些 VisualStates 并使用 DataStateBehavior 切换它们。我如何用装饰器做到这一点?

0 投票
3 回答
2587 浏览

silverlight - 在 WP7 + Silverlight 中,如何更改列表框项的视觉状态?

我需要更改列表框项的视觉状态。这是具有视觉状态的 DataTemplate。我使用 WP7 作为我的环境。

这是我的列表框:

我绑定到这个 ListBox 的 ItemsSource 的 ObservableCollection 是:

如何根据属性“CurrentState”的变化将 ListBox 的视觉状态更改为“编辑”和“正常”?

谢谢