更改用户交互的响应状态

此页仅适用于 Silverlight 2 项目

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

Dd185503.alert_note(zh-cn,Expression.10).gif说明:

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

更改响应鼠标单击的状态

  1. 如果尚未创建状态组和状态,可以定义用户控件的可视状态和过渡时间。例如,下图显示的用户控件代表扑克游戏中的一张扑克牌。“SideDisplayed”状态组中包括显示牌面朝上(“FaceUp”)和牌面朝下(“FaceDown”)的状态。

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

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

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

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

    Dd185503.alert_tip(zh-cn,Expression.10).gif提示:

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

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

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

    Dd185503.alert_tip(zh-cn,Expression.10).gif提示:

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

    按 ENTER 后,Microsoft Expression Blend 将会在 Microsoft Visual Studio 2008(如果已安装)中打开项目。如果没有安装代码编辑器,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
    

    有关 Visual Studio 2008 与 Expression Blend 的互操作性的详细信息,请参阅编辑代码隐藏文件

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

    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 2008 中遇到“无法加载该解决方案”错误,则可能尚未安装 Microsoft Silverlight Tools for Visual Studio 2008(此链接可能指向英文页面)。安装相关工具,然后尝试在 Expression Blend 的“事件”面板中双击。

  • 如果在测试项目 (F5) 时未显示用户控件,并且浏览器窗口未指示错误,则表示您可能尚未在启动文档中绘制用户控件的实例。该启动文档是运行应用程序时显示的第一个文档。如果用户控件是在单独的文档中创建的,则必须生成项目 (Ctrl+Shift+B),打开启动文档(通常为 Page.xaml),再打开“资源库”Dd185503.0224cabd-5da1-4e01-bddd-4a647401a098(zh-cn,Expression.10).png,从“自定义控件”选项卡中选择用户控件,然后在美工板上绘制该用户控件。

  • 如果您在生成应用程序时遇到问题,则表示您可能没有安装正确版本的 Microsoft Silverlight。有关详细信息,请参阅安装 Silverlight 2 工具和运行时

后续步骤

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

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