2014-01-23 88 views
1

最近碰到RepeatBehavior="Forever"EventTrigger內存泄漏的一些故事板,雖然我知道如何解決它,但我想知道是否有任何其他快速和容易的事情,我可以做,以幫助避免故事板類型泄漏在未來?比如只需附加一個完整的處理程序或其他東西以確保所有東西都能正確處理?通過XAML有效結束故事板

我知道這是一個懸而未決的問題,但希望改進流程向前發展(對於任何支持故事板SL/WPF等的應用程序),希望只需使用xaml,所以我不會在不同的地方翻轉並且可以在我自己在故事板中工作時做到這一點。

回答

2

在XAML中停止Storyboard的最簡單方法是使用StopStoryboard class ...與BeginStoryboard元素相反。還有其他xxxStoryboard類太...從鏈接的頁面上MSDN:

<StackPanel.Triggers> 

    <!-- Begin the Storyboard --> 
    <EventTrigger RoutedEvent="Button.Click" SourceName="BeginButton"> 
     <BeginStoryboard Name="MyBeginStoryboard"> 
     <Storyboard > 
      <DoubleAnimation 
      Storyboard.TargetName="myRectangle" 
      Storyboard.TargetProperty="Width" 
      Duration="0:0:5" From="100" To="500" /> 
     </Storyboard> 
     </BeginStoryboard> 
    </EventTrigger> 

    <!-- Pause the Storyboard --> 
    <EventTrigger RoutedEvent="Button.Click" SourceName="PauseButton"> 
     <PauseStoryboard BeginStoryboardName="MyBeginStoryboard" /> 
    </EventTrigger> 

    <!-- Resume the Storyboard --> 
    <EventTrigger RoutedEvent="Button.Click" SourceName="ResumeButton"> 
     <ResumeStoryboard BeginStoryboardName="MyBeginStoryboard" /> 
    </EventTrigger> 

    <!-- Seek one second into the storyboard's active period. --> 
    <EventTrigger RoutedEvent="Button.Click" SourceName="SeekButton"> 
     <SeekStoryboard 
     BeginStoryboardName="MyBeginStoryboard" 
     Offset="0:0:1" Origin="BeginTime" /> 
    </EventTrigger> 

    <!-- Skip to Fill --> 
    <EventTrigger RoutedEvent="Button.Click" SourceName="SkipToFillButton"> 
     <SkipStoryboardToFill BeginStoryboardName="MyBeginStoryboard" /> 
    </EventTrigger> 

    <!-- Stop the Storyboard --> 
    <EventTrigger RoutedEvent="Button.Click" SourceName="StopButton"> 
     <StopStoryboard BeginStoryboardName="MyBeginStoryboard" /> 
    </EventTrigger> 
+0

見這就是我想我也陷入了StopStoryboard運行的不確定性,對不對處置進程和對象等應有盡有關於故事板完成後內存不足?它是否可以內嵌到故事板中,以便故事板能夠運行,然後立即調用停止,以確保它確實處於「停止」狀態並被丟棄? –

+0

PS - 如果它有助於我目前正在做的工作來修復我目前發現的崩潰(應該已經獲得了一個很好的內存分析器),它正在將所有內容移動到statemanager中,並像無盡的重複一樣放棄任何遞歸。 –

+1

因此,查看(該頁面的鏈接)[http://msdn.microsoft.com/en-us/library/ms744905(v = vs.110).aspx] ya複製該示例,它沒有解決從'RepeatBehavior ='Forever''和'EventTrigger'的關聯中,內存泄漏,所以我想知道這是它發現的唯一情況,還是我可以從字面上將它從Forever限制爲像'RepeatBehavior =「50x」 '並且它仍然保持EventTriggers和ControlStoryBoardAction調用到位時以相同方式清理泄漏?嗯。 –