2009-09-23 98 views
0

在这一点上2 Silverlight中提供了投影实现, 但他们都没有真正做我想做的。是否有可能创建System.Windows.Media.Projection的自定义实现

我需要类似PlaneProjector类的东西,但是 它只需要一个RotationY属性,每当此属性发生更改时它都会引发一个事件 。

我无法从PlaneProjector创建子类,因为它是密封的,所以我唯一的剩余选项(我认为)是从 System.Windows.Media.Projection创建子类...但我可以几乎没有关于这个班的任何信息

是否有人知道如何实现自己的Silverlight自定义投影仪?

更新

的事情是:

我有改变PlaneProjection的RotationY属性动画。 从0到180 一个动画一个动画从180到0

我需要通知的每一个变化,以将RotationY的,所以我可以正确地更新UI。

回答

1

无法创建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上有一个事件,只要值发生变化就会通知您。这是否有助于你实现你想要做的事情?

+0

你能否提供一个你的意思的例子......因为我必须在这里错过一些非常微不足道的东西。 (将添加更多的细节问题) – TimothyP 2009-09-23 21:05:26

+1

我用一些代码更新了答案。 – KeithMahoney 2009-09-24 00:26:52

相关问题