为什么即使满足条件,我的MultiDataTrigger也只能运行一次?

时间:2019-03-06 03:57:12

标签: wpf xaml

为了进一步减少c#代码,我尝试在XAML上处理Hamburger Menu的动画。我已经应用了MultiDataTrigger,其条件是使用“当前宽度”和“汉堡菜单”按钮中的Button按下。它会为第一个Width 70-> 150和Width 150-> 70设置动画,但是之后不再起作用。

    <Grid x:Name="NavigationGrid" Grid.RowSpan="2" Background="Black">
    <StackPanel Margin="0">
        <Button x:Name="HamburgerMenuBtn" Style="{DynamicResource NavigationBtn_Style}"/>
    </StackPanel>
    <Grid.Style>
        <Style TargetType="Grid">
            <Setter Property="Width" Value="70"/>
            <Style.Triggers>
                <MultiDataTrigger>
                    <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding ElementName=NavigationGrid,Path=ActualWidth}" Value="70"/>
                        <Condition Binding="{Binding ElementName=HamburgerMenuBtn,Path=IsPressed}" Value="True"/>
                    </MultiDataTrigger.Conditions>
                    <MultiDataTrigger.EnterActions>
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimation
                                        From="70"
                                        To="150"
                                        Duration="0:0:0.5"
                                        Storyboard.TargetProperty="Width"/>
                            </Storyboard>
                        </BeginStoryboard>
                    </MultiDataTrigger.EnterActions>
                </MultiDataTrigger>
                <MultiDataTrigger>
                    <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding ElementName=NavigationGrid,Path=ActualWidth}" Value="150"/>
                        <Condition Binding="{Binding ElementName=HamburgerMenuBtn,Path=IsPressed}" Value="True"/>
                    </MultiDataTrigger.Conditions>
                    <MultiDataTrigger.EnterActions>
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimation
                                        From="150"
                                        To="70"
                                        Duration="0:0:0.5"
                                        Storyboard.TargetProperty="Width"/>
                            </Storyboard>
                        </BeginStoryboard>
                    </MultiDataTrigger.EnterActions>
                </MultiDataTrigger>
            </Style.Triggers>
        </Style>
    </Grid.Style>
</Grid>

1 个答案:

答案 0 :(得分:0)

IsPressed仅在瞬间是正确的。失去第二个动画。只需使用第一个动画,然后使其反转即可。因此它生长然后减小尺寸。 AutoReverse =“ true”。

您可能还需要稍微增加持续时间。