我一直在用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可见时绑定传感器?
答案 0 :(得分: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
答案 1 :(得分: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 xaml file in a different cs file?