私はWP7アプリケーションでグリッド(とその上のすべてのコントロール)を動かそうとしています。グリッドをオフセットする最善の方法はMarginプロパティを使用しているようですが、WP7ではThicknessAnimationUsingKeyFramesがサポートされていないため、直接行うことはできません。xamlストーリーボードをWP7のカスタムコントロールのポイントプロパティにバインドするにはどうすればよいですか?
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プロパティが呼び出されることは決してありません。
エディタでは、OriginOffsetを変更するたびにマージンも変更されます(マージン=新しい厚さ(value.X、value.Y)にブレークポイントを設定します)。予想通り。
感謝任意の助け! おかげ
データバインディングをサポートするために、DependencyPropertyにする必要がOriginOffsetはありません? –
華麗!ありがとう。私は例外を過ぎているが、何も起こらない...上記のコードスニペットを更新した。何かご意見は? – swinefeaster