我不想这么快就提出另一个问题,但我似乎无法让这项工作做得很好。
我有一个UserControl
,StoryBoard
设置为Unloaded RoutedEvent
发生时运行。但是,我也有代码,以便在单击按钮时从UserControl
中删除StackPanel
。我希望看到的是,当点击删除按钮时,StoryBoard
运行,然后 UserControl
已从StackPanel
中删除。
已经有很多代码,所以我不确定要放置什么。让我知道您希望我为您提供哪些代码来帮助我。
我所拥有的只是RoutedEvent
UserControl
,它会引发删除(或卸载)事件:
public static readonly RoutedEvent deleteEvent =
EventManager.RegisterRoutedEvent("delete", RoutingStrategy.Bubble,
typeof(RoutedEventHandler), typeof(TimeEntry));
private void raiseDeleteEvent()
{
RoutedEventArgs newDeleteEvent = new RoutedEventArgs(deleteEvent,this);
RaiseEvent(newDeleteEvent);
}
private void deleteButton_Click(object sender, RoutedEventArgs e)
{
raiseDeleteEvent();
}
然后,主窗口中的两个方法注册到抛出的事件:
private void entryAdder_Click(object sender, RoutedEventArgs e)
{
currentSession.addEntry(DateTime.Now);
scrollStack.Children.Add(currentSession.currentTimeEntry);
currentSession.currentTimeEntry.delete += currentTimeEntry_delete;
}
void currentTimeEntry_delete(object sender, RoutedEventArgs e)
{
scrollStack.Children.Remove(sender as TimeEntry);
}
最后,UserControl
及其StoryBoard
s:
<Storyboard x:Key="Ondelete">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" Storyboard.TargetName="UserControl">
<EasingDoubleKeyFrame KeyTime="0" Value="1"/>
<EasingDoubleKeyFrame KeyTime="0:0:0.25" Value="0"/>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)" Storyboard.TargetName="UserControl">
<EasingDoubleKeyFrame KeyTime="0" Value="1"/>
<EasingDoubleKeyFrame KeyTime="0:0:0.25" Value="0"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
答案 0 :(得分:0)
我想出了如何解决我的问题。我决定不使用Unloaded
事件来制作动画,而是对动画进行程序编码,然后让UserControl
订阅Completed
的{{1}}事件,并且最后触发它自己的删除事件,这将使任何订阅 事件的事件发生(即从视觉DoubleAnimation
和 StackPanel
对象列表中删除)。这将允许动画运行,然后,当它完成时,引发删除事件。
这里是代码的混乱。这些方法调用几乎总结了所有这些。它们位于UserControl
:
UserControl