@Grasinki

Почему MouseHover и MouseLeave при событии, с параметрами Width и Height срабатывают не правильно?

Вообщем кинул на компонент "PictureBox" - MouseHover и MouseLeave.
private void MainPicture_MouseHover(object sender, EventArgs e)
        {
     
            MainPicture.Width += 2;
            MainPicture.Height += 2;
        }

        private void MainPicture_MouseLeave(object sender, EventArgs e)
        {
        
            MainPicture.Width -= 2;
            MainPicture.Height -= 2;
        }

При наведении должно увеличивать, а при "Уборке" уменьшать. Срабатывает норм, если делать это медленно, но если двигать мышкой по этим картинкам, они увеличиваются либо уменьшаются до небывалых размеров.
В итоге пришлось дописать:
private void MainPicture_MouseHover(object sender, EventArgs e)
        {
            if (MainPicture.Width > 32 || MainPicture.Height > 32) return;
            MainPicture.Width += 2;
            MainPicture.Height += 2;
        }

        private void MainPicture_MouseLeave(object sender, EventArgs e)
        {
            if (MainPicture.Width < 34 || MainPicture.Height < 34) return;
            MainPicture.Width -= 2;
            MainPicture.Height -= 2;
        }

Но теперь при наведении - некоторая заторможенность на увеличение и уменьшение, не критично конечно.
  • Вопрос задан
  • 400 просмотров
Пригласить эксперта
Ответы на вопрос 2
@BashkaMen
C# программист
Это лучше реализовать через XAML.
Вот нашел пример, но вам нужна ThicknessAnimation на Margin, попробуйте
https://metanit.com/sharp/wpf/16.php

<EventTrigger RoutedEvent="StackPanel.MouseEnter">
            <EventTrigger.Actions>
              <BeginStoryboard>
                <Storyboard>
                  <ColorAnimation 
                      AutoReverse="False" 
                      Duration="0:0:1" 
                      From="Blue" To="Red"
                      AccelerationRatio="1" 
                      Storyboard.TargetProperty="(StackPanel.Background).(SolidColorBrush.Color)"
                      FillBehavior="HoldEnd">
                  </ColorAnimation>
                </Storyboard>
              </BeginStoryboard>
            </EventTrigger.Actions>
          </EventTrigger>
          <EventTrigger RoutedEvent="StackPanel.MouseLeave">
            <EventTrigger.Actions>
              <BeginStoryboard>
                <Storyboard>
                  <ColorAnimation 
                      AutoReverse="False" 
                      Duration="0:0:1" 
                      From="Red" To="Blue"
                      AccelerationRatio="1" 
                      Storyboard.TargetProperty="(StackPanel.Background).(SolidColorBrush.Color)"
                      FillBehavior="HoldEnd">
                  </ColorAnimation>
                </Storyboard>
              </BeginStoryboard>
            </EventTrigger.Actions>
          </EventTrigger>
Ответ написан
AlexanderYudakov
@AlexanderYudakov
C#, 1С, Android, TypeScript
Пара взаимосвязанных событий — это MouseEnter и MouseLeave.
MouseHover тут не нужен.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы