Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以创建System.Windows.Media.Projection的自定义实现_C#_.net_Silverlight - Fatal编程技术网

C# 是否可以创建System.Windows.Media.Projection的自定义实现

C# 是否可以创建System.Windows.Media.Projection的自定义实现,c#,.net,silverlight,C#,.net,Silverlight,此时,Silverlight中提供了2个投影实现, 但他们没有一个人真正做我想做的事 我需要像飞机放映机这样的课程,但是 它只需要一个RotationY属性,并且应该引发一个事件 无论何时更改此属性 我无法从PlaneProjector创建子类,因为它是密封的, 所以我唯一剩下的选择(我认为)是从 系统。Windows。媒体。投影。。。但我几乎找不到任何关于这门课的信息 有人知道如何为Silverlight实现自己的定制投影仪吗 更新 问题是: 我有改变平面投影旋转属性的动画。 一个从0到180

此时,Silverlight中提供了2个投影实现, 但他们没有一个人真正做我想做的事

我需要像飞机放映机这样的课程,但是 它只需要一个RotationY属性,并且应该引发一个事件 无论何时更改此属性

我无法从PlaneProjector创建子类,因为它是密封的, 所以我唯一剩下的选择(我认为)是从 系统。Windows。媒体。投影。。。但我几乎找不到任何关于这门课的信息

有人知道如何为Silverlight实现自己的定制投影仪吗

更新

问题是:

我有改变平面投影旋转属性的动画。 一个从0到180的动画 从180到0的一个动画


每次对RotationY的更改都需要通知我,这样我才能正确更新UI。

无法创建投影的自定义实现

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;
}
此类有一个事件,该事件将在“Value”属性更改时激发。现在您可以在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对象,而不是平面投影。ValueProxy上有一个事件,该事件将在值更改时通知您。这有助于你实现你的目标吗?

你能举例说明你的意思吗。。。因为我肯定错过了一些非常琐碎的事情。(将为问题添加更多细节)