我有一个像这样的控制模板
<ControlTemplate TargetType="Button">
<Grid >
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualStateGroup.Transitions>
<!--Take one half second to trasition to the MouseOver state.-->
<VisualTransition To="MouseOver"
GeneratedDuration="0:0:0.5"/>
</VisualStateGroup.Transitions>
<VisualState x:Name="Normal" />
<!--Change the SolidColorBrush, ButtonBrush, to red when the
mouse is over the button.-->
<VisualState x:Name="MouseOver">
<Storyboard>
<ColorAnimation Storyboard.TargetName="ButtonBrush"
Storyboard.TargetProperty="Color" To="Red" />
</Storyboard>
</VisualState>
**<VisualState x:Name="SelectedButton">
<Storyboard x:Name="SelectedButtonStoryboard">
<ColorAnimation Storyboard.TargetName="ButtonBrush"
Storyboard.TargetProperty="Color" To="Red" />
</Storyboard>
</VisualState>**
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Grid.Background>
<SolidColorBrush x:Name="ButtonBrush" Color="Green"/>
</Grid.Background>
</Grid>
</ControlTemplate>
我将遍历此控件模板以获取名为SelectedButtonStoryboard
的故事板或获取可视状态SelectedButton
并调用其中任何一个。
请帮忙。提前谢谢。
答案 0 :(得分:1)
听起来你应该根据你的示例xaml更改visualstate。
VisualStateManager.GoToState(this, "SelectedButton", true);
或者你只能使用ControlTemplate
来引用控件VisualStateManager.GoToState(controlInstance, "SelectedButton", true);
答案 1 :(得分:1)
您无法在控件模板中命名元素,因为没有生成匹配的设计器代码隐藏。 元素的命名通过运行时搜索可视树中的名称,并在用户控件的InitializeObject调用期间为其分配成员对象来工作。
模板中的元素仅在运行时有效地添加到可视树中。
但是,您可以使用VisualTreeHelper迭代可视树,查找特定的元素类型(在您的情况下是Storyboard对象)。