如何使用VisualStateManager返回“Base”状态?

时间:2009-10-02 08:29:46

标签: silverlight-3.0 visualstatemanager

我知道我们可以使用

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

进入SomeState1,但现在如何回到基本状态,就像没有状态一样,加载控件的状态。

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

// OR

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

// OR

VisualStateManager.GoToState(this,null,true);

问题是如果没有这种方式返回到初始或基本状态,那么我将不得不始终创建第一个状态,并在构造函数中转到控制开始时的第一个状态。

我没有找到任何文档,所以我正在尝试所有组合,但没有找到任何工作..

3 个答案:

答案 0 :(得分:20)

正常!=基地。

Base是应用任何视觉状态之前的控件的初始状态(即在VSM处于活动状态之前)。

如果您在Expression blog上阅读了这篇文章,我在这里有一个很好的描述:

  

...当你创作自己的模板时   你应该控制或UserControl   在每个州定义一个'默认'状态   组。 有控制权去那些   'default'表示初始化时,   并通过抑制转换来执行此操作   这样就可以毫不拖延地发生。一旦   它在状态图上,即控件   已准备好进行状态转换   现在你可以实现   事件处理程序触发   状态图中的转换。

从简短的VSM源代码看,似乎没有办法退出VSM并回到原来的Base状态......所以是的,你需要一个“正常”状态。 :(

我也觉得有点烦人的是VSM状态不能轻易删除,尽管上面的解决方案确实有意义。也许他们将来会解决这个问题。

答案 1 :(得分:16)

为此,您必须首先定义您的“基础”状态。

如果你定义一个不包含故事板的视觉状态,那么这个状态将有效地等于“基础”状态 - 加载控件的状态。

<VisualStateGroup x:Name="TheGroup">  
    <VisualState x:Name="SomeState1">
       <Storyboard>
         ...
       </Storyboard>
    </VisualState>

    <VisualState x:Name="BaseState" /> <!-- Note: the VisualState tag is empty -->
</VisualStateGroup>

然后切换到该状态:

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

答案 2 :(得分:5)

默认控件在CommonStates组中定义“正常”视觉状态,在鼠标输出时恢复为等。我认为您需要遵循相同的模式,我认为是自定义控件?