首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Silverlight:如何为模板化/自定义控件创建VisualState

Silverlight:如何为模板化/自定义控件创建VisualState
EN

Stack Overflow用户
提问于 2011-10-14 14:46:15
回答 1查看 2.7K关注 0票数 2

我正在尝试在Silverlight中创建一个模板化/自定义控件。

基控件可以是System.Windows.Controls.Button。该按钮具有以下可视状态:

代码语言:javascript
复制
<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状态,我就可以进行如下的视觉转换:

代码语言:javascript
复制
<vsm:VisualTransition From="Pressed" To="MouseButtonUp" GeneratedDuration="0:0:5" />

或者:

代码语言:javascript
复制
<vsm:VisualTransition From="MouseButtonUp" To="MouseOver" GeneratedDuration="0:0:5" />
EN

回答 1

Stack Overflow用户

发布于 2011-10-14 15:28:05

下面这行代码在xaml中为您创建了一个Visual-State。

代码语言:javascript
复制
    <vsm:VisualState x:Name="MouseButtonUp">
        ...Your code for animation
    </vsm:VisualState>

这还不是全部。除非你强制你的执行控制转到这个视觉状态,否则它是无用的。那你是怎么做到的呢?下面是如何实现的。

代码语言:javascript
复制
    VisualStateManager.GoToState(this, "MouseButtonUp", true);

上面的代码将执行您可能已经在xaml中的'MouseButtonUp‘VisualState定义中定义的任何动画。只要您觉得鼠标处于MousebuttonUp状态,就调用上面的代码语句。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7763995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档