Анимировать свойство внутри пользовательского элемента управления из раскадровки в ресурсе - PullRequest
0 голосов
/ 10 января 2012

У меня есть файл Resources.xaml, содержащий Storyboard, предназначенный для элемента управления с именем myButton (этот элемент управления находится в другом пользовательском элементе управления):

<ResourceDictionary ...>
  <Storyboard x:Key="expandWizard">
    <DoubleAnimation Storyboard.TargetName="myButton"
                     Storyboard.TargetProperty="Width"
                     To="200" Duration="0:0:0.250" />
  </Storyboard>
</ResourceDictionary>

Ссылка на словарь ресурсов содержится в файле Shell.xaml, который содержит пользовательский элемент управления Test:

<Window xmlns:test="clr-namespace:MyProject.UI" ...>
  <Window.Resources>
    <ResourceDictionary>
      <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="Resources/Resources.xaml" />
      </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
  </Window.Resources>

  <!-- User control that contains a button. -->
  <test:Test x:Name="testControl" />
</Window>

И, наконец, пользовательский элемент управления Test.xaml содержит кнопку с именем myButton:

<UserControl ...>
  <Button x:Name="myButton" Content="OK" />
</UserControl>

Когда я запускаю раскадровку, я получаю сообщение об ошибке: InvalidOperationException: 'myButton' name cannot be found in the name scope of 'MyProject.UI.Shell'.

Это имеет некоторый смысл, поскольку myButton не находится непосредственно внутри Shell.xaml, но как я могу заставить эту работу работать?

1 Ответ

3 голосов
/ 10 января 2012

Вы должны иметь возможность запускать раскадровку прямо на целевом элементе управления. Предположим, что ваш UserControl называется testControl, тогда вы можете позвонить

Storyboard sb = (Storyboard)Resources["expandWizard"];
testControl.BeginStoryboard(sb);
...