1

これを行う方法が必要なようです。

2つのプロパティトリガーに基づいて、リストボックスにItemContainerStyleを適用しています。ご覧のとおり、私はまったく同じトリガーの開始/終了アクションのセットを使用しており、2つの異なるプロパティに適用されています。<Trigger Property = "prop1" OR Property = "prop2">に相当するものはありますか?(明らかにそのようには見えないでしょうが、それはおそらく意味を理解します。)

<Style x:Key="ListBoxItemStyle" TargetType="ListBoxItem">
            <Style.Triggers>
                <Trigger Property="IsKeyboardFocusWithin" Value="True">
                    <Trigger.EnterActions>
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimation Storyboard.TargetProperty="Height"
                                        To="50" Duration="0:0:.3"></DoubleAnimation>
                            </Storyboard>
                        </BeginStoryboard>
                    </Trigger.EnterActions>
                    <Trigger.ExitActions>
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimation Storyboard.TargetProperty="Height"
                                              To="25" Duration="0:0:.3" />
                            </Storyboard>
                        </BeginStoryboard>
                    </Trigger.ExitActions>
                </Trigger>


            </Style.Triggers>


   </Style>
<Style x:Key="ListBoxItemStyle" TargetType="ListBoxItem">
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Trigger.EnterActions>
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimation Storyboard.TargetProperty="Height"
                                        To="50" Duration="0:0:.3"></DoubleAnimation>
                            </Storyboard>
                        </BeginStoryboard>
                    </Trigger.EnterActions>
                    <Trigger.ExitActions>
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimation Storyboard.TargetProperty="Height"
                                              To="25" Duration="0:0:.3" />
                            </Storyboard>
                        </BeginStoryboard>
                    </Trigger.ExitActions>
                </Trigger>


            </Style.Triggers>
</Style>
4

2 に答える 2

1

次のいずれかを試しましたか (Adam Nathan の本から抜粋: Windows Presentation Foundation Unleashed ):

  • 複数のトリガーが同じ要素に適用されました (論理 OR を取得するため)。
  • 複数のプロパティが同じトリガーに対して評価されます (論理 AND を取得するため)。

論理和

Style.Triggers には複数のトリガーを含めることができるため、まったく同じ Setter を持つ複数のトリガーを作成して、論理 OR 関係を表現できます。

例えば:

<Style.Triggers>
    <Trigger Property="IsMouseOver" Value="True">
        ...
    </Trigger>
    <Trigger Property="IsKeyboardFocusWithin" Value="True">
        ....
    </Trigger>
</Style.Triggers>

つまり、「IsMouseOverが true の場合、またはIsKeyboardFocusWithinが true の場合、アクションを適用します。

論理積

論理 AND 関係を表現するには、 MultiTrigger と呼ばれる Trigger のバリエーション、または MultiDataTrigger呼ばれるDataTriggerバリエーションを使用できます。どちらのトリガーにも、通常は Trigger または DataTrigger 内に直接配置する情報を含む条件のコレクションがあります。

例えば:

<Style.Triggers>
    <MultiTrigger>
    <MultiTrigger.Conditions>
        <Condition Property="IsMouseOver" Value="True"/>
        <Condition Property="IsKeyboardFocusWithin" Value="True"/>
    </MultiTrigger.Conditions>
    </MultiTrigger>
        <Setter ...>
        <Setter ...>
</Style.Triggers>
于 2010-03-13T19:20:26.547 に答える
0

ストーリーボードをリソースに配置し、トリガーでそれらを参照するだけです。これはまさにあなたが望むものではありませんが、アニメーションを 1 つの中心的な場所で定義することができます (アニメーションをコピーして貼り付ける必要はありません)。

<Style TargetType="...">
    <Style.Resources>
        <Storyboard x:Key="MyGetFocusAnimation">
            <DoubleAnimation Storyboard.TargetProperty="Height"
                             To="50" Duration="0:0:.3" />
        </Storyboard>
        <Storyboard x:Key="MyLoseFocusAnimation">
            <DoubleAnimation Storyboard.TargetProperty="Height"
                             To="25" Duration="0:0:.3" />
        </Storyboard>
    </Style.Resources>
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Trigger.EnterActions>
                <BeginStoryboard Storyboard="{StaticResource MyGetFocusAnimation}" />
            </Trigger.EnterActions>
            <Trigger.ExitActions>
                <BeginStoryboard Storyboard="{StaticResource MyLoseFocusAnimation}" />
            </Trigger.ExitActions>
        </Trigger>
        <Trigger Property="IsKeyboardFocusWithin" Value="True">
            <Trigger.EnterActions>
                <BeginStoryboard Storyboard="{StaticResource MyGetFocusAnimation}" />
            </Trigger.EnterActions>
            <Trigger.ExitActions>
                <BeginStoryboard Storyboard="{StaticResource MyLoseFocusAnimation}" />
            </Trigger.ExitActions>
        </Trigger>
    </Style.Triggers>
</Style>
于 2010-03-31T22:08:40.403 に答える