2012-04-21 56 views
2

我有一段時間搞清楚如何在我的WPF窗口中更改Storyboard的一個屬性。如何以編程方式更改/替換模板中的StoryBoard?

我的窗口有一個動畫,可以通過一種「捲起」動畫縮小窗口的大小。根據某些條件(不管是否設置了某個道具),我們希望窗口稍長一些以適合額外的項目。

我一直在使用this.FindResource()來抓取元素,這是沒有問題的。但是,當然,故事板被凍結,其中包含的DoubleAnimations被凍結,所以我不能改變任何東西。

所以我想,很好,我只是換出整個故事板。

<Trigger Property="IsMouseOver" Value="True"> 
    <Trigger.ExitActions> 
     <BeginStoryboard Storyboard="{StaticResource ToolbarCollapse_NoIB}" /> 
    </Trigger.ExitActions> 
</Trigger> 

我在想,以編程方式,我可以進入代碼隱藏並更改該觸發器以使用ToolbarCollapse_YesIB。

在這種嘗試中,我能走到這一步:

var tbTemplate = (ControlTemplate)this.FindResource("ToolbarTemplate"); 
var newStoryboard = (Storyboard)this.FindResource("ToolbarCollapse_YesIB"); 
tbTemplate.Triggers[2].ExitActions[0] = ??? needs to be a TriggerAction 

這裏的地方我卡住了。如何爲那個Storyboard創建一個TriggerAction?構造函數並不適用於此,也不適用於方法。

這些類的文檔讓我覺得我的方式偏離軌道。

誰能幫助我或者使這種方法的工作,或者給我介紹到另一種方法,將更好地工作?

回答

0

我想出了一個使用替代方法的解決方案。看起來像它可能有點hacky,但它的作品。

我創建了兩個故事板,ToolbarCollapse_YesIBToolbarCollapse_NoIB。它們僅僅因高度屬性而不同。

然後我代替我原來的問題的觸發上面有兩個MultiTriggers:

<MultiTrigger> 
    <MultiTrigger.Conditions> 
     <Condition Property="IsMouseOver" Value="True"/> 
     <Condition Property="MinHeight" 
        Value="{StaticResource ToolbarCollapsedHeight_YesIB}"/> 
    </MultiTrigger.Conditions> 
    <MultiTrigger.ExitActions> 
     <BeginStoryboard Storyboard="{StaticResource ToolbarCollapse_YesIB}" /> 
    </MultiTrigger.ExitActions> 
</MultiTrigger> 

<MultiTrigger> 
    <MultiTrigger.Conditions> 
     <Condition Property="IsMouseOver" Value="True"/> 
     <Condition Property="MinHeight" 
        Value="{StaticResource ToolbarCollapsedHeight_NoIB}"/> 
    </MultiTrigger.Conditions> 
    <MultiTrigger.ExitActions> 
     <BeginStoryboard Storyboard="{StaticResource ToolbarCollapse_NoIB}" /> 
    </MultiTrigger.ExitActions> 
</MultiTrigger> 

我用我的對象的構造函數來設置MinHeight。根據我的IB領域的存在,我將MinHeight設置爲ToolbarCollapsedHeight_YesIB_NoIB

所以,現在如果MinHeight=(my YesIB size),一個故事板是活動的。如果MinHeight=(my NoIB size),另一個故事板處於活動狀態。

(我其實有另一對ToolbarExpand_YesIB/NoIB模板,在上述觸發分配給MultiTrigger.EnterActions,但我離開了出來贅述。)

這是在屁股真正的痛苦。我希望這可以幫助其他發現類似情況的人。

相關問題