0

Kinect ハンド ポインターをコントロールに使用する単純なアプリケーションを C# で開発しています。

私のアプリケーションには 6 つ以上のキャンバスがあり、すべてのキャンバスに Kinect 領域を埋め込んでいます。mainwindow.cs の kinectsensor をキャンバスの KinectRegions にバインドします。

<Canvas Name=" Canvas1" Visibility="Visible">
<k:KinectRegion KinectSensor="{Binding kinectSensor}" Name="kinectRegionCP">
// some controls
</Canvas>
<Canvas Name=" Canvas1" Visibility="Hidden">
<k:KinectRegion KinectSensor="{Binding kinectSensor}" Name="kinectRegionAP">
// some controls
</Canvas>
.........// some more canvases

問題は、一度に 1 つのキャンバスしか表示されない場合でも、他のすべてのキャンバスが kinect 領域をアクティブに使用しているため、CPU 使用率が 90% に跳ね上がることです。

特定のキャンバスが表示されている場合にのみセンサーをバインドする方法はありますか?

4

2 に答える 2

1

コントロールの にDataContext基づいて を設定できます。Visibilityの例を次に示しCanvasます。にデータバインドされた他のコントロールがある場合は、 に を適用するCanvas必要があります。Stylek:KinectRegion

<Canvas Name=" Canvas1" Visibility="Visible">
<Canvas.Style>
    <Style TargetType="Canvas">
        <Style.Triggers>
            <Trigger Property="Visibility" Value="Visible">
                <Setter Property="DataContext" Value="{Binding}"/>
            </Trigger>
            <Trigger Property="Visibility" Value="Hidden">
                <Setter Property="DataContext" Value="{x:Null}"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</Canvas.Style>
<k:KinectRegion KinectSensor="{Binding kinectSensor}" Name="kinectRegionCP">
    // some controls

于 2013-07-11T16:15:20.893 に答える
0

私のアドバイスは、クラスに INotifyPropertyChanged を実装し、次のようにバインディングを設定することです。

private KinectSensor _kinectSensor1;
public KinectSensor kinectSensor1
{
    get { return _kinectSensor1; }
    private set; //assuming you don't really need to set it from the XAML
}

次に、バインドまたはバインド解除するときはいつでも:

_kinectSensor1 = new KinectSensor()
RaisePropertyChanged("kinectSensor1");

周りを見回した後、ここで同じことを実装する別の答えを見つけました: How to access a KinectSensorchooser object on an x​​aml file in a different cs file?

于 2013-07-11T13:21:01.430 に答える