Обход шаблона управления в Silverlight - PullRequest
0 голосов
/ 07 сентября 2011

У меня есть такой шаблон элемента управления

    <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 ]

1 голос
/ 07 сентября 2011

Нельзя называть элементы в шаблоне элемента управления, поскольку не сгенерирован соответствующий код разработчика Именование элементов работает посредством поиска во время выполнения имен в визуальном дереве и назначения им объектов-членов во время вызова InitializeObject в пользовательском элементе управления.

Элементы шаблона эффективно добавляются в визуальное дерево только во время выполнения.

Однако вы можете использовать VisualTreeHelper для итерации визуального дерева в поисках определенных типов элементов (в вашем случае объекты Storyboard).

1 голос
/ 07 сентября 2011

Похоже, вам лучше изменить визуальное состояние на основе вашего примера xaml.

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

Или это только ссылка на элемент управления с использованием ControlTemplate

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