Я пытаюсь заставить Grid (и все элементы управления на нем) дрожать в моем приложении WP7.Кажется, лучший способ смещения сетки - использование свойства Margin, но в WP7 не поддерживается ThicknessAnimationUsingKeyFrames, поэтому я не могу сделать это напрямую.
Вместо этого я создал пользовательский элемент управления:
using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
namespace MyNamespace
{
// Grid which has an OriginOffset property that is tied to the margin,
// and thus can be animated.
public class OffsettableGrid : Grid
{
public OffsettableGrid()
{
}
public static readonly DependencyProperty OriginOffsetProperty =
DependencyProperty.Register(
"OriginOffset", typeof(Point), typeof(OffsettableGrid), null);
public Point OriginOffset
{
get
{
return new Point(Margin.Left, Margin.Top);
}
set
{
Margin = new Thickness(value.X, value.Y,
Margin.Right, Margin.Bottom);
}
}
}
}
, а затем в xaml я объявляю раскадровку следующим образом:
<Storyboard x:Name="m_shakeStoryboard"
RepeatBehavior="5x"
AutoReverse="False"
SpeedRatio="5">
<PointAnimationUsingKeyFrames
BeginTime="00:00:00"
Storyboard.TargetName="m_chooseAnswerGrid"
Storyboard.TargetProperty="(OffsettableGrid.OriginOffset)">
<EasingPointKeyFrame KeyTime="00:00:00" Value="0,0"/>
<EasingPointKeyFrame KeyTime="00:00:00.2" Value="-10,0"/>
<EasingPointKeyFrame KeyTime="00:00:00.4" Value="10,0"/>
<EasingPointKeyFrame KeyTime="00:00:00.6" Value="0,0"/>
</PointAnimationUsingKeyFrames>
</Storyboard>
и затем, конечно, я объявляю свою сетку, используя.
Но когда я иду, чтобы запустить раскадровку:
m_shakeStoryboard.Begin();
мое свойство OriginOffset никогда не вызывается.Я устанавливаю точку останова на «Margin = new Thickness (value.X, value.Y»), но она никогда не попадает в цель. Что я делаю не так?
В редакторе всякий раз, когда я изменяю OriginOffset, изменяются полякак и ожидалось.
Любая помощь высоко ценится! Спасибо