是否可以在代码中以编程方式将新的VisualState添加到CustomControl模板的VisualStateManager中?
例如,我可以在设计时手动将此XAML添加到CustomControl模板:
<VisualState x:Name="First">
<Storyboard>
<ColorAnimation Duration="0:0:0"
Storyboard.TargetName="SBorder"
Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)" To="Red" />
</Storyboard>
</VisualState>
但是如何在运行时添加新的VisualState?
最佳答案 我认为这是可行的,但绝不容易……
这应该工作:
Grid grid = this.Template.FindName("RootElement", this) as Grid;
(VisualStateManager.GetVisualStateGroups(grid)).Add(new VisualStateGroup() { /* the code for your visualstategroup here */ });
(您需要根据模板的根元素名称的类型以及设置visualstatemanager的位置进行调整,但总而言之,这可以起作用.
另外,这会添加一个新的visualStateGroup,而不仅仅是一个visualState.如果要将VisualState添加到现有的visualStateGroup,则必须首先从集合中获取组,但这是常见的“从集合中获取元素”的东西
基本上:
>获取包含visualStateManager的模板元素
>使用VisualStateManager.GetVisualStateGroups()静态方法获取当前的visualStateGroups
>从集合中获取所需的组或创建一个新组并将其添加到集合中
>在此组中添加新的visualState
希望这可以帮助.