我正在尝试在Silverlight中创建一个模板化/自定义控件。
基控件可以是System.Windows.Controls.Button。该按钮具有以下可视状态:
<vsm:VisualStateManager.VisualStateGroups>
<!--Define the states for the common states. The states in a
VisualStateGroup are mutually exclusive to each other.-->
<vsm:VisualStateGroup x:Name="CommonStates">
<!--Define the VisualStates in this VistualStateGroup.-->
<vsm:VisualState x:Name="Normal"/>
<vsm:VisualState x:Name="MouseOver" />
<vsm:VisualState x:Name="Pressed" />
<vsm:VisualState x:Name="Disabled" />
</vsm:VisualStateGroup>
<!--Define the states for the focus states. The states in a
VisualStateGroup are mutually exclusive to each other.-->
<vsm:VisualStateGroup x:Name="FocusStates">
<!--Define the VisualStates in this VistualStateGroup.-->
<vsm:VisualState x:Name="Focused" />
<vsm:VisualState x:Name="Unfocused" />
</vsm:VisualStateGroup>
</vsm:VisualStateManager.VisualStateGroups>我的自定义控件需要另一个状态MouseButtonUp (MouseButtonDown可以由预定义的Pressed状态表示)。在这里,默认情况下,MouseButtonUp状态将被解释为MouseOver状态,但我希望MouseButtonUp状态的行为与MouseOver状态不同。
如何添加此MouseButtonUp可视状态?(MouseButtonUp状态仅在用户释放鼠标后和用户开始移动之前存在。
顺便说一句:我应该使用自定义控件还是用户控件?我一直对这两个问题感到困惑。看起来这两种方法在很多情况下都可以工作。
非常感谢。
更新:一旦我们添加了这个MouseButtonUp状态,我就可以进行如下的视觉转换:
<vsm:VisualTransition From="Pressed" To="MouseButtonUp" GeneratedDuration="0:0:5" />或者:
<vsm:VisualTransition From="MouseButtonUp" To="MouseOver" GeneratedDuration="0:0:5" />发布于 2011-10-14 15:28:05
下面这行代码在xaml中为您创建了一个Visual-State。
<vsm:VisualState x:Name="MouseButtonUp">
...Your code for animation
</vsm:VisualState>这还不是全部。除非你强制你的执行控制转到这个视觉状态,否则它是无用的。那你是怎么做到的呢?下面是如何实现的。
VisualStateManager.GoToState(this, "MouseButtonUp", true);上面的代码将执行您可能已经在xaml中的'MouseButtonUp‘VisualState定义中定义的任何动画。只要您觉得鼠标处于MousebuttonUp状态,就调用上面的代码语句。
https://stackoverflow.com/questions/7763995
复制相似问题