无法创建Projection的自定义实现。
PlaneProjection类有什么问题?如果唯一的问题是属性更改时缺少事件,请不要忘记您可以将数据绑定到这些属性并以这种方式获取通知。
这是一种可能性。不是直接为RotationY属性设置动画,您可以为数据绑定到RotationY属性的代理值设置动画效果。以下是您可以使用的一个示例类:
public class ValueProxy : FrameworkElement
{
public static readonly DependencyProperty ValueProperty =
DependencyProperty.Register("Value", typeof(object), typeof(ValueProxy), new PropertyMetadata(OnPropertyChanged));
public object Value
{
get { return GetValue(ValueProperty); }
set { SetValue(ValueProperty, value); }
}
private static void OnPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
ValueProxy obj = (ValueProxy)d;
if (obj.PropertyChanged != null)
{
obj.PropertyChanged(obj, null);
}
}
public event EventHandler PropertyChanged;
}
该类有一个事件,只要“值”属性发生更改就会触发。现在,您可以在Xaml中使用它:
<Grid x:Name="LayoutRoot" >
<Grid.Resources>
<Storyboard x:Name="sb1">
<DoubleAnimation Storyboard.TargetName="valueProxy" Storyboard.TargetProperty="Value" From="0" To="180" FillBehavior="Stop" />
</Storyboard>
<c:ValueProxy x:Name="valueProxy" Value="{Binding RotationY, ElementName=pp, Mode=TwoWay}" PropertyChanged="ValueProxy_PropertyChanged" />
</Grid.Resources>
<Button Content="Play Animation" Width="200" Height="200" Click="Button_Click" >
<Button.Projection>
<PlaneProjection x:Name="pp" RotationY="0" />
</Button.Projection>
</Button>
</Grid>
请注意,动画是针对ValueProxy对象而不是PlaneProjection。 ValueProxy上有一个事件,只要值发生变化就会通知您。这是否有助于你实现你想要做的事情?
你能否提供一个你的意思的例子......因为我必须在这里错过一些非常微不足道的东西。 (将添加更多的细节问题) – TimothyP 2009-09-23 21:05:26
我用一些代码更新了答案。 – KeithMahoney 2009-09-24 00:26:52