更改用户交互的响应状态

当您创建自己的用户控件时,可以添加状态和状态组,以根据用户控件所处的状态来更改控件的外观。若要更改这些状态以响应用户交互(如单击),可添加事件处理程序方法以调用 GoToState 方法。

有关详细信息,请参阅 MSDN 上的 GoToState Dd185503.xtlink_newWindow(zh-cn,Expression.40).png

Note注意:

在 Microsoft Silverlight 项目中,修改系统控件(例如按钮)的模板时,除了定义控件对用户交互做出的响应外,还定义了默认状态。您无法添加或删除默认状态。但是,可以更改控件处于上述不同状态下的外观,还可以遵照以下过程来更改状态。

更改状态以响应单击

若要更改状态,则可以使用 GoToStateAction 行为,或者可以使用事件处理程序方法。

有关使用行为的信息,请参阅向对象添加行为

以下过程向您演示如何添加事件处理程序方法来更改状态。

  1. 如果您还没有创建状态组和状态,则可以为用户控件定义不同的视觉状态和过渡。例如,下图显示的用户控件代表扑克游戏中的一张扑克牌。“SideDisplayed”状态组中包括显示牌面朝上(“FaceUp”)和牌面朝下(“FaceDown”)的状态。

    有关详细信息,请参阅定义用户控件的可视状态和过渡时间

    Dd185503.74c3b2ef-32ab-4aaa-839d-852741d9b2c2(zh-cn,Expression.40).png

  2. 在“状态”下,选择“Base”以禁用状态记录功能。

  3. 在“对象和时间线”面板中,选择 [UserControl] 对象,以挂钩到对整个用户控件表面区域上的操作做出响应的事件。

  4. 在“属性”面板中,单击“事件”Dd185503.6c67bb3b-e8a2-4a63-bad5-54d5c15b04dd(zh-cn,Expression.40).png 以从属性视图切换至事件视图。

    tip note提示:

    若要从“属性”面板切换回属性视图,请单击“属性”Dd185503.cee1494c-ef95-4dd4-9fbc-9d02edfa78b7(zh-cn,Expression.40).png

  5. 在“ MouseLeftButtonDown ”事件旁边,输入事件处理程序方法的名称,如“goClick”。

    Dd185503.98d2b5bb-eedc-4a13-bf87-7b7514868f87(zh-cn,Expression.40).png

    tip note提示:

    此外,只需在事件文本框中双击,即可生成事件处理程序方法的默认名称。

    在按 Enter 之后,Microsoft Expression Blend 会在代码编辑器中打开用户控件的代码隐藏文件,并粘贴事件处理程序方法的代码。

    private void goClick(object sender, MouseButtonEventArgs e)
    {
    
    }
    
    Private Sub goClick(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseButtonEventArgs)
    
    End Sub
    

    有关详细信息,请参阅修改代码隐藏文件

  6. 若要使用户控件更改状态,请使用状态的名称调用 GoToState Dd185503.xtlink_newWindow(zh-cn,Expression.40).png(此链接可能指向英文页面)方法。例如,将下列粗体显示的代码粘贴到代码隐藏文件中:

    private bool isFaceUp = false;
        
    
    private void goClick(object sender, MouseButtonEventArgs e)
    {
    
          if (isFaceUp)
        
    
          {
        
    
            VisualStateManager.GoToState(this, "FaceDown", true);
        
    
          }
        
    
          else
        
    
          {
        
    
            VisualStateManager.GoToState(this, "FaceUp", true);
        
    
        }
        
    
          isFaceUp = !isFaceUp;
        
    }
    
    Private isFaceUp As Boolean = False
        
    
    Private Sub goClick(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseButtonEventArgs)
    
          If isFaceUp Then
        
    
            VisualStateManager.GoToState(Me, "FaceDown", True)
        
    
          Else
        
    
            VisualStateManager.GoToState(Me, "FaceUp", True)
        
    
          End If
        
    
          isFaceUp = Not (isFaceUp)
        
    End Sub
    
  7. 生成项目 (Ctrl+Shift+B)。

  8. 测试项目 (F5),然后单击用户控件以查看其是否改变状态。

疑难解答

  • 如果您在Expression Blend 的“事件”面板中键入名称时,遇到“无法更改代码隐藏文件。找不到下列类”错误,则可能需要切换至外部代码编辑器(通常为 Microsoft Visual Studio)来重载该解决方案。重新加载后便会加入定义缺失类的新文件。

  • 如果您在 Visual Studio 2010 中遇到“无法加载该解决方案”错误,则可能尚未安装适用于 Visual Studio 2010 的 Silverlight 工具。安装相关工具,然后尝试在 Expression Blend 中的“事件”面板中键入名称。

    有关详细信息,请参阅 Microsoft Silverlight Tools for Visual Studio 2010 Dd185503.xtlink_newWindow(zh-cn,Expression.40).png(适用于 Visual Studio 2010 的 Microsoft Silverlight 工具)。

  • 如果在测试项目 (F5) 时未显示用户控件,并且浏览器窗口未指示错误,则表示您可能尚未在启动文档中绘制用户控件的实例。该启动文档是运行应用程序时显示的第一个文档。如果用户控件是在单独的文档中创建的,则必须生成项目(按 Ctrl+Shift+B),打开启动文档(通常为 Page.xaml),再打开“资产”面板(单击“资产”Dd185503.0d8b8d29-1af9-418f-8741-be3097d76eab(zh-cn,Expression.40).png),从“项目”类别中选择用户控件,然后在美工板上绘制该用户控件。

  • 如果您在生成应用程序时遇到问题,则表示您可能没有安装正确版本的 Silverlight。

    有关详细信息,请参阅安装 Silverlight 工具和运行时

后续步骤

  • 您可以添加动画,例如使按钮在指针移到其上方时螺旋盘转。有关详细信息,请参阅添加状态改变后显示的动画

  • 您可以通过 Expression 社区网站 Dd185503.xtlink_newWindow(zh-cn,Expression.40).png(此链接可能指向英文页面)上提供的“操作方式”视频教程来观看有关状态和状态组的实际应用方案。

Microsoft Corporation 版权所有 ⓒ 2011。保留所有权利。