6

MainMenuButtonタイプのカスタムボタンがあり、UserControlそれをスタイリングしています。MultiTriggerここで、2 つの条件が満たされた場合にのみボタンの外観を変更するを実装したいと考えました。

最初の条件は ifIsMouseOver == trueです。私は単に次を入れますCondition

<MultiTrigger>
    <MultiTrigger.Conditions>
        <Condition Property="IsMouseOver" Value="True"/>
    </MultiTrigger.Conditions>
    <MultiTrigger.EnterActions>
        <Setter TargetName="LayoutRoot" Property="Background" Value="Red">
    </MultiTrigger.EnterActions>
    <MultiTrigger.ExitActions>
        <Setter TargetName="LayoutRoot" Property="Background" Value="Black">
    </MultiTrigger.ExitActions>
</MultiTrigger>

2 番目の条件は、次のことに関連していDependencyPropertyます。

public static readonly DependencyProperty IsCheckedProperty = DependencyProperty.Register("IsChecked", typeof(bool), typeof(MainMenuButton), new PropertyMetadata(false));

別のSO 投稿で、ユーザーはDataTriggerに反応するために使用できると言いましたIsCheckedProperty。だから私は他の投稿からコードを試しましたが、うまくいきませんでした:

<MultiTrigger>
    <MultiTrigger.Conditions>
        <Condition Property="IsMouseOver" Value="True"/>
        <Condition Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=IsChecked}" Value="False"/>
    </MultiTrigger.Conditions>
    <MultiTrigger.EnterActions>
        <BeginStoryboard Storyboard="{StaticResource MouseEnter}"/>
    </MultiTrigger.EnterActions>
    <MultiTrigger.ExitActions>
        <BeginStoryboard Storyboard="{StaticResource MouseLeave}"/>
    </MultiTrigger.ExitActions>
</MultiTrigger>

これはどのように解決できますか?回答ありがとうございます。:)

4

4 に答える 4

12

その間に動作するようになりました。実用的なソリューションを含むこのブログ記事に出くわしました: http://anders.janmyr.com/search?q=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>

今では動作します。とにかく、すべての回答者の努力に感謝します!

于 2012-09-23T13:28:07.820 に答える
1
<Window x:Class="DataBinding.MultiTrigger"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MultiTrigger" Height="300" Width="300">
<Window.Resources>
    <Style TargetType="Button">
        <Style.Setters>
            <Setter Property="Background" Value="BlueViolet"></Setter>
            <Setter Property="Foreground" Value="Red"></Setter>
        </Style.Setters>
        <Style.Triggers>
            <MultiTrigger>
                <MultiTrigger.Conditions>
                    <!--Use only one conditions for Implementations-->
                    <Condition Property="Control.IsFocused" Value="True"></Condition>
                    <Condition Property="Control.IsMouseOver" Value="True"></Condition>
                </MultiTrigger.Conditions>
                <MultiTrigger.Setters>
                    <Setter Property="Background" Value="Green"></Setter>
                    <Setter Property="Foreground" Value="White"></Setter>
                </MultiTrigger.Setters>
            </MultiTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>
<Button Height="50">The World Game</Button>

于 2014-05-15T06:46:17.963 に答える
1

あなたのスタイルでは、正しい を指定していないと思いますTargetType。これはうまくいくはずです-

<Style TargetType="{x:Type local:MainMenuButton}">
   <MultiTrigger>
    <MultiTrigger.Conditions>
        <Condition Property="IsMouseOver" Value="True"/>
        <Condition Binding="IsChecked" Value="False"/>
    </MultiTrigger.Conditions>
    // Your setter goes here
</MultiTrigger>
</Style>

MainMenuButton クラスが存在する名前空間に対応する名前空間localを xaml に追加する必要があります。

于 2012-09-23T13:21:20.377 に答える
0

DP にバインドする必要はないと思います。IsMouseOver については、Property="IsChecked" だけを使用してみてください。

于 2012-09-23T11:27:55.857 に答える