Как изменить цвет скелета в KinectSkeletonViewer, предоставляемом SDK v1.6

Я хочу изменить элемент управления KinectSkeletonViewer, предоставленный в примерах Kinect. Я хочу выставить свойство для изменения цвета скелета (отслеживаемые кости).

Что я должен сделать?


person Ewerton    schedule 22.11.2012    source источник
comment
Вам нужно привязываемое свойство в средстве просмотра? то есть <kt:SkeletonViewer BoneColor="Red">   -  person Nicholas Pappas    schedule 22.11.2012


Ответы (1)


Вам нужно будет изменить два файла — KinectSkeleton.cs и KinectSkeletonViewer.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); }
}

Теперь вы хотите связать привязку. В событии OnLoad KinectSkeletonViewer -

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 в приведенных выше примерах заменены на TrackedJointBrush и TrackedBonePen (обратите внимание на регистр). Затем вы можете закомментировать жестко закодированные переменные.

Теперь вы сможете связать эти два свойства в KinectSkeletonViewer при объявлении их в XAML.

В классе KinectSkeleton определено несколько других цветов. Вы можете использовать ту же концепцию, что и выше, чтобы связать их.

person Nicholas Pappas    schedule 22.11.2012
comment
Спасибо, я уже сделал это, но по какой-то причине свойство не отображалось в xaml - person Ewerton; 22.11.2012