0

我一直在用 C# 开发一个简单的应用程序,它使用 Kinect 手形指针进行控制。

在我的应用程序中,我有超过 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

问题是,即使一次只有一个画布可见,但由于所有其他画布都在积极使用 kinect 区域,CPU 使用率会飙升至 90%。

有没有办法仅在特定 Canvas 可见时绑定传感器?

4

2 回答 2

1

您可以设置DataContext基于Visibility控件的。这是关于Canvas. 如果您在 上有其他控件Canvas是数据绑定的,则需要将Style应用于k: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 回答