0

So I have this WPF code:

<EventTrigger RoutedEvent="PreviewMouseRightButtonDown">
    <EventTrigger.Actions>
        <BeginStoryboard Name="Storyboard">
            <Storyboard>
                <ThicknessAnimation Storyboard.TargetProperty="Margin">
                    ...
                </ThicknessAnimation>
            </Storyboard>
        </BeginStoryboard>
    </EventTrigger.Actions>
</EventTrigger>

Is there a way to toggle the bottom margin from one value to another, something like:

Margin = Margin.Bottom is 0 ? new Thickness(0, 0, 0, -50) : new Thickness(0);
ynsbl.eng
  • 142
  • 2
  • 8

1 Answers1

1

You can animate the thickness here's an example https://learn.microsoft.com/en-us/dotnet/desktop/wpf/controls/how-to-animate-a-borderthickness-value?view=netframeworkdesktop-4.8

coded copied here

namespace SDKSamples
{
    public class ThicknessAnimationExample : Page
    {
        public ThicknessAnimationExample()
        {
            // Create a NameScope for this page so that
            // Storyboards can be used.
            NameScope.SetNameScope(this, new NameScope());

            // Create a Border which will be the target of the animation.
            Border myBorder = new Border();
            myBorder.Background = Brushes.Gray;
            myBorder.BorderBrush = Brushes.Black;
            myBorder.BorderThickness = new Thickness(1);
            myBorder.Margin = new Thickness(0, 60, 0, 20);
            myBorder.Padding = new Thickness(20);

            // Assign the border a name so that
            // it can be targeted by a Storyboard.
            this.RegisterName( "myAnimatedBorder", myBorder);

            ThicknessAnimation myThicknessAnimation = new ThicknessAnimation();
            myThicknessAnimation.Duration = TimeSpan.FromSeconds(1.5);
            myThicknessAnimation.FillBehavior = FillBehavior.HoldEnd;

            // Set the From and To properties of the animation.
            // BorderThickness animates from left=1, right=1, top=1, and bottom=1
            // to left=28, right=28, top=14, and bottom=14 over one and a half seconds.
            myThicknessAnimation.From = new Thickness(1, 1, 1, 1);
            myThicknessAnimation.To = new Thickness(28, 14, 28, 14);

            // Set the animation to target the Size property
            // of the object named "myArcSegment."
            Storyboard.SetTargetName(myThicknessAnimation, "myAnimatedBorder");
            Storyboard.SetTargetProperty(
                myThicknessAnimation, new PropertyPath(Border.BorderThicknessProperty));

            // Create a storyboard to apply the animation.
            Storyboard ellipseStoryboard = new Storyboard();
            ellipseStoryboard.Children.Add(myThicknessAnimation);

            // Start the storyboard when the Path loads.
            myBorder.Loaded += delegate(object sender, RoutedEventArgs e)
            {
                ellipseStoryboard.Begin(this);
            };

            StackPanel myStackPanel = new StackPanel();
            myStackPanel.HorizontalAlignment = HorizontalAlignment.Center;
            myStackPanel.Children.Add(myBorder);

            Content = myStackPanel;
        }
    }
}
kenny
  • 21,522
  • 8
  • 49
  • 87
  • Hello, thanks for your reply I meant in XAML, I can do it easily in code behind – ynsbl.eng Oct 11 '20 at 11:51
  • @ynsbl.eng IMO it's clear in code behind and not of the no code behind church, but maybe this question helps you https://stackoverflow.com/questions/7292540/animate-margin-thickness#7292762 – kenny Oct 11 '20 at 13:11