Границы масштабирования кнопки (условия) - PullRequest
0 голосов
/ 14 января 2020

Все, я пытался масштабировать размер кнопки, код работает нормально, если я нажимаю только один раз, но если я нажимаю кнопку несколько раз подряд, кнопка не может вернуть ее первоначальный размер. Вот код:

 private void ButtonSearchMedication_OnClick(object sender, RoutedEventArgs e)
    {


            //Assign variation of width in term of begin, end and duration
        DoubleAnimation widthAnimation  =new DoubleAnimation(ButtonSearchMedication.ActualWidth, ButtonSearchMedication.ActualWidth*0.8, new Duration(timeSpan:TimeSpan.FromSeconds(0.2)) );

        //Assign variation of height in term of begin, end and duration
        DoubleAnimation heightAnimation = new DoubleAnimation(ButtonSearchMedication.ActualHeight,ButtonSearchMedication.ActualHeight*0.8, new Duration(timeSpan:TimeSpan.FromSeconds(0.2)));

        //Assign properties to button
        ButtonSearchMedication.BeginAnimation(Button.WidthProperty,widthAnimation);
        ButtonSearchMedication.BeginAnimation(Button.HeightProperty,heightAnimation);
    }

private void ButtonSearchMedication_OnMouseLeave (отправитель объекта, MouseEventArgs e) {

            DoubleAnimation widthAnimation = new DoubleAnimation(ButtonSearchMedication.ActualWidth, ButtonSearchMedication.ActualWidth*1.25,new Duration(timeSpan:TimeSpan.FromSeconds(0.2)));
            DoubleAnimation heightAnimation = new DoubleAnimation(ButtonSearchMedication.ActualHeight, ButtonSearchMedication.ActualHeight*1.25,new Duration(timeSpan:TimeSpan.FromSeconds(0.2)));
            ButtonSearchMedication.BeginAnimation(Button.WidthProperty,widthAnimation);
            ButtonSearchMedication.BeginAnimation(Button.HeightProperty,heightAnimation);
        }

Могу ли я что-нибудь сделать, чтобы размер кнопки стал ее исходным размером после каждого MouseLeave? Спасибо

1 Ответ

1 голос
/ 14 января 2020

Щелчок мыши / отпуск мыши не совпадают. Вы можете уйти, не нажимая.

В любом случае, чтобы дать вам начало здесь, есть фиксированный код:

const double _width = 200;
const double _height = 100;

void ButtonSearchMedication_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    var widthAnimation = new DoubleAnimation(_width * 0.8, TimeSpan.FromSeconds(0.2));
    var heightAnimation = new DoubleAnimation(_height * 0.8, TimeSpan.FromSeconds(0.2));
    buttonSearchMedication.BeginAnimation(WidthProperty, widthAnimation);
    buttonSearchMedication.BeginAnimation(HeightProperty, heightAnimation);
}

void ButtonSearchMedication_PreviewMouseLeftButtonUp(object sender, MouseEventArgs e)
{
    var widthAnimation = new DoubleAnimation(_width, TimeSpan.FromSeconds(0.2));
    var heightAnimation = new DoubleAnimation(_height, TimeSpan.FromSeconds(0.2));
    buttonSearchMedication.BeginAnimation(WidthProperty, widthAnimation);
    buttonSearchMedication.BeginAnimation(HeightProperty, heightAnimation);
}

Я решил использовать событие мыши вниз / вверх, вы можете изменить его, чтобы войти / выйти или что-то еще.

Как видите, размер постоянен, и анимации используют только параметр to (таким образом, несколько действий в случае события нажатия не будут складываться). Если размер кнопки - Dynami c, то вам придется извлечь и сохранить размер оригинала до начала анимации, возможно, с помощью другого события (например, ввода мышью).

...