2013-02-04 4 views
3

У меня есть пользовательский пользовательский элемент управления, который восстанавливают регистрацию свойство зависимостей HoverHeight:свойства зависимостей анимировать

public sealed partial class VirtualPointer : UserControl 
{ 
    public static readonly DependencyProperty HoverHeightProperty = 
     DependencyProperty.Register("HoverHeight", typeof(double), 
     typeof(VirtualPointer), new PropertyMetadata(1.0,OnHoverHeightChanged)); 

    public double HoverHeight 
    { 
     get { return (double)GetValue(HoverHeightProperty); } 
     set { SetValue(HoverHeightProperty, value); } 
    } 
    ... 

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

На странице, которая использует этот контроль, я создаю Storyboard, который должен оживить HoverHeight свойство:

<Page ...> 
    <Page.Resources> 
     <Storyboard> 
      <DoubleAnimationUsingKeyFrames Storyboard.TargetName="virtualPointer" Storyboard.TargetProperty="HoverHeight"> 
       <LinearDoubleKeyFrame Value="1.0" KeyTime="0:0:0"/> 
       <LinearDoubleKeyFrame Value="0.0" KeyTime="0:0:1"/> 
       <LinearDoubleKeyFrame Value="1.0" KeyTime="0:0:2"/> 
       <LinearDoubleKeyFrame Value="0.0" KeyTime="0:0:3"/> 
       <LinearDoubleKeyFrame Value="1.0" KeyTime="0:0:4"/> 
      </DoubleAnimationUsingKeyFrames> 
      <!-- other DoubleAnimationUsingKeyFrames --> 
     </Storyboard> 
    </Page.Resources> 
    <!-- ... --> 
    <local:VirtualPointer Name="virtualPointer" HoverHeight="0.5"/>  
</Page> 

Раскадровка содержит другие анимации, которые работают, как ожидалось. Однако, когда я начинаю раскадровку, значение HoverHeight не изменяется. Вызывается ни обработчик OnHoverHeightChanged, ни преобразователь с новым значением. Я могу установить новое значение с помощью средства настройки свойств, которое, в свою очередь, вызывает обработчик OnHoverHeightChanged, поэтому, вероятно, проблема с анимацией.

При запуске раскадровки не генерируется выход или исключение.

Я что-то упустил? Как я могу охарактеризовать свойство пользовательской зависимости?

+0

Где эти два сегмента кода? Они в стиле или где-нибудь еще? – Colin

+0

Определение класса находится в отдельном файле. '' является дочерним элементом сетки в окне. '' определяется в '', предоставляющем 'x: Key'. –

ответ

9

Установите для свойства EnableDependentAnimation анимации значение True.

Зависимые анимации вообще не запускаются в Windows 8 по умолчанию. По умолчанию они представляют собой независимые анимации (такие как анимации, которые выполняют преобразования GPU), поэтому вы не сможете получать уведомление об изменении в потоке пользовательского интерфейса. По крайней мере, это мое понимание.

+0

Отлично, спасибо. Хотя это свойство кажется немного загадочным. В конце концов, свойства элементов пользовательского интерфейса могут быть анимированы без него. –

+0

Спасибо! Потратил много времени на это, пытаясь понять, почему раскадровка не работает. – Saurabh3321

Смежные вопросы