自定义控件的可视状态管理器

时间:2010-01-13 09:38:40

标签: c# silverlight vsm

我已经构建了一个扩展内容控件的自定义控件。在这里,我有一个工作正常的零件和状态模型。

然后我用它作为我的xaml的根(将代码放在Blend的templates文件夹中)

一切正常,我可以打开一个新的'DaveControl'并获得我想要的功能。

但是,如果我在这里添加make一些视觉状态,例如alertOnScreen并尝试使用visualstatemanager它不起作用。

事实上没有列出任何州。

SL3中的行为GotoVisualState可以正常工作!

如何让视觉状态在代码中运行?

2 个答案:

答案 0 :(得分:7)

所以解决方案如下:使用扩展的可视状态管理器!

ExtendedVisualStateManager.GoToElementState(this.LayoutRoot as FrameworkElement, "OffScreen", true);

这是有效的,因为它需要一个框架元素......等等。 Workaround for VisualStateManager.GoToState not working on Window

答案 1 :(得分:1)

您是否在课程中添加了一组可用状态作为一组TemplateVisualState属性? Blend使用这些来配置其可用状态列表。

你的课通常应该是这样的: -

[TemplateVisualState(Name = "MyGroup1State1", GroupName = "MyGroup1")]
[TemplateVisualState(Name = "MyGroup1State2", GroupName = "MyGroup1")]
[TemplateVisualState(Name = "MyGroup2State1", GroupName = "MyGroup2")]
[TemplateVisualState(Name = "MyGroup2State2", GroupName = "MyGroup2")]
[TemplatePart(...)]
[TemplatePart(...)]
public class MyControl : ContentControl