У меня есть словарь ресурсов со стилем для моего окна. В этом стиле я определяю шаблон и в нем я определяю много вещей. Среди других я определяю раскадровку для анимации определенных вещей, которые определены в шаблоне. Это выглядит примерно так:Не удается найти ресурс, определенный в ControlTemplate
<Style TargetType="local:MyWindow">
<Setter Property="Background" Value="red" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:MyWindow">
<Grid>
<Grid.Resources>
<Storyboard x:Key="MyAnimation">
<DoubleAnimation Storyboard.TargetName="ToBeAnimated" ... />
</Storyboard>
</Grid.Resources>
<Grid x:Name="ToBeAnimated" Background="Green"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Теперь у меня есть экземпляр MyWindow (который определенно в своей работе применяет стиль :)) и из окна я хочу, чтобы запустить анимацию. Однако это
this.FindResource("MyAnimation");
не удалось!
Если я двигаю раскадровку в
<ControlTemplate.Resources/>
можно найти, но если я делать
((Storyboard)FindResource("StoryboardOpenOverlay")).Begin();
я получаю другую ошибку, что не может найти ToBeAnimated
...
Любые идеи?
Удивительный! Благодарю. На самом деле я могу вызвать this.GetTemplateChild (...), когда захочу, не только в OnApplyTemplate(). Благодаря! –
Я предпочитаю делать это в ApplyTemplate и сохранять значение в локальном поле, например, вы каждый раз сохраняете стоимость вызова GetTemplateChild –