2

WPFウィンドウでストーリーボードの1つのプロパティを変更する方法を理解するのに時間がかかっています。

私のウィンドウには、一種の「ロールアップ」アニメーションでウィンドウのサイズを縮小するアニメーションがあります。条件(特定のプロップが設定されているかどうか)によっては、追加のアイテムを収めるためにウィンドウを少し長くする必要があります。

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

そして、ここで私は立ち往生しています。そのストーリーボードのTriggerActionを作成するにはどうすればよいですか?コンストラクターは、これにもメソッドにも実際には役立ちません。

これらのクラスのドキュメントは、私が軌道に乗っていないことを私に思わせます。

誰かが私がこのアプローチを機能させるのを手伝ってくれるか、または私をよりうまく機能する別のアプローチに導くことができますか?

4

1 に答える 1

0

私は別の方法を使用して解決策を思いついた。少しハッキーかもしれませんが、動作します。

2つのストーリーボードを作成ToolbarCollapse_YesIBしましToolbarCollapse_NoIBた。それらは、heightプロパティによってのみ異なります。

次に、上記の元の質問のトリガーを2つのマルチトリガーに置き換えました。

<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)、1つのストーリーボードがアクティブになります。の場合MinHeight=(my NoIB size)、他のストーリーボードがアクティブです。

(実際には、上記のトリガーでToolbarExpand_YesIB/NoIB割り当てられた別のテンプレートのペアがありますが、簡潔にするためにそれらを省略しました。)MultiTrigger.EnterActions

これはお尻の本物の痛みでした。これが同様の状況を見つける他の人々に役立つことを願っています。

于 2012-04-23T18:45:55.453 に答える