2009-07-24 5 views
0

У меня есть EventTrigger, который остановит несколько раскадровки, которые определены в моем XAML ... но теперь мне нужно остановить раскадровку, которую я запускаю программно.Остановка программно созданной раскадровки

<UserControl.Resources> 
    <Storyboard x:Key="FadeIn"> ... Fade In Definition </StoryBoard> 
    <Storyboard x:Key="FadeOut"> ... Fade In Definition </StoryBoard> 
</UserControl> 
<UserControl.Triggers> 
    <EventTrigger RoutedEvent="Mouse.MouseLeave"> 
    <BeginStoryboard="{StaticResource FadeIn}" x:Name="FadeIn_BeginStoryboard" /> 
    </EventTrigger> 
    <EventTrigger RoutedEvent="Mouse.MouseEnter"> 
    <StopStoryboard BeginStoryboardName="FadeIn_BeginStoryboard"/> 
    <StopStoryboard BeginStoryboardName="FadeOut_BeginStoryboard"/> 
    </EventTrigger> 
</UserControl.Triggers> 


Storyboard FadeOutStoryboard; 
public void StopFadeOut() { 
    FadeIn_BeginStoryboard.Storyboard.Stop(); 
    FadeOut_BeginStoryboard.Storyboard.Stop(); 
    FadeOutStoryboard = (Storyboard) FindResource("FadeOut"); 
    FadeOutStoryboard.Name="FadeOutStoryboard"; 
    FadeOutStoryboard.Begin(); 
} 

Когда я положил < StopStoryboard BeginStoryboardName = "FadeOutStoryboard" /> он говорит мне, что не может найти FadeOutStoryboard. Я довольно новичок в программировании WPF, поэтому может быть лучший способ сделать это, и я открыт для этого. Метод StopFadeOut() вызывается родителем, который создает экземпляр моего usercontrol.

ответ

1

Переместить эти строки в конструктор. Вам нужно только запустить их один раз.

FadeOutStoryboard = (Storyboard)FindResource("FadeOut"); 
FadeOutStoryboard.Name = "FadeOutStoryboard"; 

Затем добавьте эту строку сразу после них.

RegisterName("FadeOutStoryboard", FadeOutStoryboard);