【问题标题】:Silverlight: How to Create a VisualState for a Templated / Custom ControlSilverlight:如何为模板化/自定义控件创建 VisualState
【发布时间】:2011-10-14 06:46:15
【问题描述】:

我正在尝试在 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>

我的自定义控件需要另一个状态,MouseButtonUpMouseButtonDown 可以用预定义的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" />

【问题讨论】:

    标签: silverlight custom-controls controltemplate visualstates


    【解决方案1】:

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

        <vsm:VisualState x:Name="MouseButtonUp">
            ...Your code for animation
        </vsm:VisualState>
    

    这还不是全部。除非您强制执行控件进入此 Visual-State,否则它是无用的。好吧,你是怎么做到的?方法如下。

        VisualStateManager.GoToState(this, "MouseButtonUp", true);
    

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

    【讨论】:

    • 我听从了你的指示。系统似乎检测到了新状态“MouseButtonUp”,但我无法为这个状态设置动画,例如&lt;vsm:VisualTransition From="Pressed" To="MouseButtonUp" GeneratedDuration="0:0:5" /&gt;,这个转换被忽略了。请指教。
    猜你喜欢
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多