我知道我们可以使用
VisualStateManager.GoToState(this,"SomeState1",true);
进入SomeState1,但现在如何回到基本状态,就像没有状态一样,加载控件的状态。
VisualStateManager.GoToState(this,"base",true);
// OR
VisualStateManager.GoToState(this,"",true);
// OR
VisualStateManager.GoToState(this,null,true);
问题是如果没有这种方式返回到初始或基本状态,那么我将不得不始终创建第一个状态,并在构造函数中转到控制开始时的第一个状态。
我没有找到任何文档,所以我正在尝试所有组合,但没有找到任何工作..
答案 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组中定义“正常”视觉状态,在鼠标输出时恢复为等。我认为您需要遵循相同的模式,我认为是自定义控件?