Я бы посоветовал вам изменить свойства To
и From
для ThicknessAnimation
, чтобы они соответствовали высоте окна.И дополнительно, что в начале анимации вы устанавливаете Visibility
меню на Visible
, а в конце Collapsed
, если меню не должно быть видно в данный момент.
Для этого япредложил бы добавить поле, содержащее состояние openness меню
private bool menuOpen = false;
, и изменить один из блоков управления в этом
<Storyboard x:Key="MenuStoryboard">
<ThicknessAnimation Storyboard.TargetProperty="Margin"
Storyboard.TargetName="gridMenu"
DecelerationRatio="0.9"
Duration="0:0:1" />
</Storyboard>
и удалитьпрочее.
Вы также должны убрать поле Grid
и добавить Collapsed
в качестве значения по умолчанию Visibility
<Grid x:Name="gridMenu" Background="Blue"
Visibility="Collapsed"
Grid.Column="1">
...
</Grid>
А затем в Click-Event-Handler вы можетеотрегулируйте раскадровку в соответствии с ситуацией и запустите анимацию.
private void Button_Click(object sender, RoutedEventArgs e)
{
var storyBoard = this.FindResource("ShowRightMenu") as Storyboard;
var animation = storyBoard.Children[0] as ThicknessAnimation;
if (menuOpen)
{
animation.To = new Thickness(0, -this.Height, 0, Height);
animation.From = new Thickness(0);
}
else
{
animation.From = new Thickness(0, -this.Height, 0, this.Height);
animation.To = new Thickness(0);
}
this.gridMenu.Visibility = Visibility.Visible;
storyBoard.Begin();
void animationCompleated(object sender2, EventArgs e2)
{
if (!menuOpen)
{
this.gridMenu.Visibility = Visibility.Collapsed;
}
storyBoard.Completed -= animationCompleated;
}
storyBoard.Completed += animationCompleated;
menuOpen = !menuOpen;
}