Как я могу обнаружить указатель мыши на моем пользовательском элементе управления wpf? - PullRequest
0 голосов
/ 15 июня 2010

Я использую некоторую анимацию в своем коде управления пользователя позади.

double height = canMain.ActualHeight - marqueeList.ActualHeight;
        marqueeList.Margin = new Thickness(0, height / 2, 0, 0);
        DoubleAnimation doubleAnimation = new DoubleAnimation();
        doubleAnimation.From = -marqueeList.ActualWidth;
        doubleAnimation.To = canMain.ActualWidth;
        doubleAnimation.RepeatBehavior = RepeatBehavior.Forever;
        doubleAnimation.Duration = new Duration(TimeSpan.FromSeconds(_marqueeTimeInSeconds));
        marqueeList.BeginAnimation(Canvas.RightProperty, doubleAnimation);

Я хочу, чтобы при наведении мыши на пользовательский элемент управления анимация остановилась.

Ответы [ 3 ]

1 голос
/ 15 июня 2010

Вы должны иметь возможность использовать метод Storyboard.Stop(), если вы запустили анимацию, установив для isControllable значение true

Storyboard.Begin(this, true); 

у вас также есть метод Storyboard.Pause(), если вы планируете перезапустить его при некоторых условиях.

Взгляните на это: http://msdn.microsoft.com/en-us/library/ms742868.aspx

Попробуйте тоже:

<Style.Triggers>
    <Trigger Property="IsMouseOver" Value="False">
      <Trigger.EnterActions>
        <BeginStoryboard>
          <Storyboard>
            <!-- do your animation here (forever) -->
          </Storyboard>
        </BeginStoryboard>
      </Trigger.EnterActions>
      <Trigger.ExitActions>
        <BeginStoryboard>
          <Storyboard>
            <!-- fake animation with duration set to 0 -->
          </Storyboard>
        </BeginStoryboard>
      </Trigger.ExitActions>          
    </Trigger>               
  </Style.Triggers>   
1 голос
/ 15 июня 2010

Вы можете обработать событие MouseMove и проверить свойство IsMouseOver

0 голосов
/ 17 июня 2010

Спасибо за ваши ответы !!

Я нашел свой ответ, для этого я использовал события ввода и отпускания мыши.

При вводе мышью введите:

  Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath("(Canvas.Right)"));
            _storyBoard.Children.Add(doubleAnimation);
            _storyBoard.Pause(marqueeList);

При отпускании мыши:

    Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath("(Canvas.Right)"));
        _storyBoard.Children.Add(doubleAnimation);
        _storyBoard.Resume(marqueeList);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...