0

我想更改 Kinect 示例中提供的 KinectSkeletonViewer 控件。我想公开一个属性来更改骨架(跟踪骨骼)的颜色。

我需要做什么?

4

1 回答 1

0

您需要修改两个文件 -KinectSkeleton.csKinectSkeletonViewer.xaml.cs. 您正在创建绑定,KinectSkeleton但是,因为这个类不是直接从查看器引用和调用的,所以您还需要在KinectSkeletonViewer.

KinectSkeleton.cs - 创建 DependencyProperties:

public static readonly DependencyProperty TrackedJointBrushProperty =
    DependencyProperty.Register(
        "TrackedJointBursh",
        typeof(Brush),
        typeof(KinectSkeleton),
        new FrameworkPropertyMetadata(new SolidColorBrush(Color.FromArgb(255, 68, 192, 68)), FrameworkPropertyMetadataOptions.AffectsRender));

public static readonly DependencyProperty TrackedBonePenProperty =
    DependencyProperty.Register(
        "TrackedBonePen",
        typeof(Pen),
        typeof(KinectSkeleton),
        new FrameworkPropertyMetadata(new Pen(Brushes.Green, TrackedBoneThickness), FrameworkPropertyMetadataOptions.AffectsRender));

KinectSkeletonViewer - 创建 DependencyProperties

public static readonly DependencyProperty TrackedJointBrushProperty =
    DependencyProperty.Register(
        "TrackedJointBursh",
        typeof(Brush),
        typeof(KinectSkeletonViewer),
        new PropertyMetadata(new SolidColorBrush(Color.FromArgb(255, 68, 192, 68))));

public static readonly DependencyProperty TrackedBonePenProperty =
    DependencyProperty.Register(
        "TrackedBonePen",
        typeof(Pen),
        typeof(KinectSkeletonViewer),
        new PropertyMetadata(new Pen(Brushes.Green, TrackedBoneThickness)));

这两个文件中定义相关的属性:

public Brush TrackedJointBursh
{
    get { return (Brush)GetValue(TrackedJointBrushProperty); }
    set { SetValue(TrackedJointBrushProperty, value); }
}

public Pen TrackedBonePen
{
    get { return (Pen)GetValue(TrackedBonePenProperty); }
    set { SetValue(TrackedBonePenProperty, value); }
}

现在您要链接绑定。在KinectSkeletonViewerOnLoad的情况下-

var trackedJointBrush = new Binding("TrackedJointBrush");
trackedJointBrush.Source = this;
skeletonCanvas.SetBinding(KinectSkeleton.TrackedJointBrushProperty, trackedJointBrush);

var trackedBonePen = new Binding("TrackedBonePen");
trackedBonePen.Source = this;
skeletonCanvas.SetBinding(KinectSkeleton.TrackedBonePenProperty, trackedBonePen);

最后,您需要查看KinectSkeleton.cs并将硬编码颜色的引用替换为新属性。 trackedJointBrush并且trackedBonePen在上述示例的情况下 - 替换为TrackedJointBrushand TrackedBonePen(注意大小写)。然后,您可以注释掉硬编码的变量。

您现在应该能够KinectSkeletonViewer在 XAML 中声明这两个属性时绑定它。

类中还定义了一些其他颜色KinectSkeleton。您也可以使用与上述相同的概念来绑定它们。

于 2012-11-22T04:38:51.503 回答