遍历Silverlight中的控件模板

时间:2011-09-07 06:29:51

标签: c# .net silverlight controltemplate

我有一个像这样的控制模板

    <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并调用其中任何一个。

请帮忙。提前谢谢。

2 个答案:

答案 0 :(得分:1)

听起来你应该根据你的示例xaml更改visualstate。

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

或者你只能使用ControlTemplate

来引用控件
VisualStateManager.GoToState(controlInstance, "SelectedButton", true);

答案 1 :(得分:1)

您无法在控件模板中命名元素,因为没有生成匹配的设计器代码隐藏。 元素的命名通过运行时搜索可视树中的名称,并在用户控件的InitializeObject调用期间为其分配成员对象来工作。

模板中的元素仅在运行时有效地添加到可视树中。

但是,您可以使用VisualTreeHelper迭代可视树,查找特定的元素类型(在您的情况下是Storyboard对象)。