为了进一步减少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>
答案 0 :(得分:0)
IsPressed仅在瞬间是正确的。失去第二个动画。只需使用第一个动画,然后使其反转即可。因此它生长然后减小尺寸。 AutoReverse =“ true”。
您可能还需要稍微增加持续时间。