StoryBoard - установить целевое имя из кода программной части

У меня есть StoryBoard в ресурсах

  <Window.Resources>
    <Storyboard x:Key="Fading" Storyboard.TargetName="NotifyWindow" Storyboard.TargetProperty="Opacity" >
        <DoubleAnimation From="1" To="0" Duration="0:0:1">
        </DoubleAnimation>
    </Storyboard>
  </Window.Resources>

И при закрытии окна у меня есть следующий код

private void NotifyWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
    Storyboard fading = this.Resources["Fading"] as Storyboard;
    if (fading != null && !fadingCompleted)
    {
        fading.Completed += FadingStoryBoard_Completed;
        fading.Begin();
        e.Cancel = true;
    }
}

private void FadingStoryBoard_Completed(object sender, EventArgs e)
{
   fadingCompleted = true;
   Close();
   fadingCompleted = false;
}

И это прекрасно работает, но я хочу перенести эту раскадровку на другую сборку. Поэтому мне нужно указать код формы StoryBoard.TargetName. Как я могу это сделать?


person Stecya    schedule 14.03.2011    source источник


Ответы (2)


Присоединенные свойства можно установить из кода с помощью статических вспомогательных методов с именами: "Set" + PropertyName

См. пример C# здесь:

Storyboard.SetTargetName(yourAnimation, "NotifyWindow"); 
person Snowbear    schedule 14.03.2011

Стандартный способ установки свойств зависимостей для объектов зависимостей одинаков для прикрепленных свойств:

dependencyObjectInstance.SetValue(SampleClass.PropertyName + "Property", value);

В вашем примере:

fading.SetValue(Storyboard.TargetNameProperty, "NotifyWindow");
person Necriis    schedule 08.03.2012