0

ついに、カスタムボタンをほぼ動作させたいように動作させました。
問題はコードです:D(IsCheckedDependencyProperty

<ControlTemplate.Triggers>
            <!-- EventTriggers for LMBUp/LMBDown/MouseEnter/MouseLeave -->
            <MultiDataTrigger>
                <MultiDataTrigger.Conditions>
                    <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}" Value="True"/>
                    <Condition Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=IsChecked}" Value="False"/>
                </MultiDataTrigger.Conditions>
                <MultiDataTrigger.EnterActions>
                    <BeginStoryboard Storyboard="{StaticResource MouseEnter}"/>
                </MultiDataTrigger.EnterActions>
                <MultiDataTrigger.ExitActions>
                    <BeginStoryboard Storyboard="{StaticResource MouseLeave}"/>
                </MultiDataTrigger.ExitActions>
            </MultiDataTrigger>                
            <MultiDataTrigger>
                <MultiDataTrigger.Conditions>
                    <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}" Value="True"/>
                    <Condition Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=IsChecked}" Value="True"/>
                </MultiDataTrigger.Conditions>
                <Setter TargetName="LayoutRoot" Property="Background" Value="Red"/>
            </MultiDataTrigger>
            <MultiDataTrigger>
                <MultiDataTrigger.Conditions>
                    <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}" Value="False"/>
                    <Condition Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=IsChecked}" Value="True"/>
                </MultiDataTrigger.Conditions>
                <Setter TargetName="LayoutRoot" Property="Background" Value="Red"/>
            </MultiDataTrigger>
        </ControlTemplate.Triggers>

少し「汚い」と思いますが、期待通りに動作しません。ユーザーがボタンをクリックするたびに、から、またはその逆IsCheckedに切り替わります。今、次のことが起こった場合truefalse

  • IsChecked == true
  • ユーザーがクリックしてIsCheckedをfalseに切り替えます
  • マウスがボタン上にあるときは常に

次に、最初のが原因で、ボタンが$ButtonNormalBackground$ではなく$MouseOverColor$になると予想しますMultiDataTrigger

私の質問は、コードを単純化して最後の問題を修正することが可能かどうかです。

前もって感謝します!

4

1 に答える 1

0

おそらく「価値解決戦略」の問題があります。DependencyProperty値を解決する方法の設定された戦略があります。ここを参照してください

アニメーションがの値を設定した場合、アニメーションBackgroundLayoutRoot停止するまで他のセッターは影響しません(この場合、セッターは「ローカル値」として扱われます)。

2番目と3番目のトリガーの<StopStoryboard>要素を使用できます。EnterActionsトリガーがアクティブ化されたときにストーリーボードがすでに停止している場合、これにより出力ウィンドウに警告が書き込まれることに注意してください。

-または-

ストーリーボードで使用できFillBehavior="Stop"ます。

于 2012-09-23T18:12:24.220 に答える