for*_*yez 13 silverlight wpf xaml
我发现可视状态管理器和触发器之间的功能有一些重叠.
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Pressed">
... bla bla ...
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
Run Code Online (Sandbox Code Playgroud)
或者我可以去
<Trigger Property="IsPressed" Value="true">
... bla bla ...
</Trigger>
Run Code Online (Sandbox Code Playgroud)
我何时应该使用一个与另一个?
使用触发器更容易做一些事情,而使用VSM则更容易.
使用VSM的最大原因是Silverlight不支持触发器.如果您希望过渡到Silverlight,请远离触发器.
VSM的两个缺点:
VSM似乎是未来.如果您使用Blend,则VSM非常易于配置.
让我们从它们之间的一般差异开始。
Setter其他财产建立。VisualStateManager。VisualStateManagerVisualTransition在设置状态之前执行。VisualTransition执行一个Storyboard。GeneratedDuration(of VisualTransition)指定的时间后,VisualStateManager更新控件CurrentState对应的属性VisualStateGroup。VisualStateManager执行VisualState(1)中请求的初始值。VisualState执行另一个Storyboard。是的,您认为VisualStateManager使方案比触发器更复杂是对的。但是,VisualStateManager的复杂性使程序员可以执行触发器无法做到的事情(不是简单的方式):
From和To命令允许重复使用相同的过渡VisualTransition。由于可以通过更改属性,事件,方法等来创建VisualState:,因此提供了更大的自由度。即使使用xaml,也可以Behavior正确使用它,这甚至是最神奇的事情。
同时实现多个状态和状态转换:由于您可以将一组状态组分配给控件(a VisualStateGroup),并且每个状态组CurrentState在给定时间具有唯一性。也许一张图像说得最好:

与WPF的自然集成:因为隐式地,控件是处理状态的控件,并允许以某种形式的控件树(父控件)控制状态,这在WPF中是自然发生的。这样,您仅需几行就可以生成非常复杂的方案。当然,也无需触摸控件后面的代码。
而且我很确定还有更多优势。最有趣的是,如果您想使用触发器自己实现其中一些优势,最终您将陷入与VisualStateManager非常相似的系统中……尝试一下!
即使具有所有这些优点,VisualStateManager系统也不应丢弃Triggers系统。触发器是一个简单的系统,但也有其潜力。
就个人而言,我将触发器用于非常简单的“原始”控件,这些控件不需要奇怪的行为或奇怪的动画。在此类控件中,VisualStateManager的实现复杂性无法证明其使用的合理性。
对于更复杂的控件,我将使用VisualStateManager,尤其是在那些使用其他“原始”控件的“复杂”控件上(请注意“原始”和“复杂”概念的含义)。当然,根据用户交互,此控件具有复杂的行为。
| 归档时间: |
|
| 查看次数: |
5117 次 |
| 最近记录: |