16

我知道我们可以使用

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

进入 SomeState1 ,但现在如何回到基本状态,比如没有状态,即加载控件的状态。

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

// OR

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

// OR

VisualStateManager.GoToState(this,null,true);

问题是,如果没有这样的方法可以回到初始状态或基本状态,那么我将必须始终创建第一个状态,并在构造函数中转到控制开始时的第一个状态。

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

4

3 回答 3

20

正常!=基础。

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

如果您在Expression 博客上阅读了这篇文章,那么我在这里举出了一个很好的描述:

...当您创作自己的模板化控件或 UserControl 时,您应该在每个状态组中定义一个“默认”状态。让控件在初始化时进入那些“默认”状态,并在抑制转换的情况下这样做,以便它不会延迟地发生。一旦它在状态图上,控件就准备好进行状态转换,因此现在您可以实现触发状态图中的转换的事件处理程序。

从 VSM 源代码的简要介绍来看,似乎没有办法离开 VSM 并回到原来的基本状态......所以是的,你确实需要一个“正常”状态。:(

尽管上述解决方案确实有意义,但我也发现无法轻松删除 VSM 状态这有点烦人。也许他们将来会解决这个问题。

于 2009-10-14T13:36:39.450 回答
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 );
于 2009-10-16T16:06:17.267 回答
5

默认控件在 CommonStates 组中定义了一个“正常”视觉状态,该状态在 mouseout 等时恢复为。我认为您需要遵循相同的模式,因为我假设是自定义控件?

于 2009-10-02T08:43:50.077 回答