我有一个pixelsense桌面,想要识别是否添加了标签。由于硬件比较陈旧,很难找到信息。Here我可以找到一个如何识别标签的例子,但只能使用预定义的值:
<s:TagVisualizer Name="TagVisualizer">
<s:TagVisualizer.Definitions>
<s:ByteTagVisualizationDefinition Value="192"
Source="SampleTagVisualization.xaml"
UsesTagOrientation="True"
TagRemovedBehavior="Fade"
PhysicalCenterOffsetFromTag="7.5,4.5"/>
</s:TagVisualizer.Definitions>
</s:TagVisualizer>如果添加了一个标记(无论是什么值),然后与数据库条目匹配,我只想引发一个事件。这应该可以同时处理至少两个对象。在TagVisualizer类中,我发现了以下事件:
public event TagVisualizerEventHandler PreviewVisualizationInitialized;
public event TagVisualizerEventHandler VisualizationAdded;
public event TagVisualizerEventHandler PreviewVisualizationMoved;
public event TagVisualizerEventHandler PreviewVisualizationRemoved;
public event TagVisualizerEventHandler VisualizationInitialized;
public event TagVisualizerEventHandler PreviewVisualizationAdded;
public event TagVisualizerEventHandler VisualizationMoved;
public event TagVisualizerEventHandler VisualizationRemoved;但就我所尝试的而言,只有在存在一些TagVisualizer定义的情况下才会引发VisualizationAdded事件。
发布于 2019-08-13 07:02:32
您可以在任何元素上使用ContactDown事件来查看任何表面输入。在这个事件上有一个Contact.ContactType属性,它应该告诉你它是一个标签,然后Contact.TagValue告诉你它的值。这甚至和它的同行的行为与MouseDown和它的同行是一样的。
对于TagVisualizer,这样做的目的是简化使用标记所需的大量公共代码,而不仅仅是检测它们。一般来说,您需要一个数据库来定义您所关心的标记值,以及这些标记相对于物理对象的位置。一个不错的做法是在数据库中查询所有这些信息,然后将TagVisualizer配置为查找所有您关心的标签。配置大量的定义不会对性能产生明显的影响。
顺便说一句,对于API文档,你应该会在SDK安装中看到一个.chm文件,它允许你离线阅读文档,因为它们不再可以在线访问。
这都是凭记忆写的,所以我希望它在一定程度上是准确和有帮助的!
(免责声明: Surface dev platform的前PM )
发布于 2019-08-15 17:34:27
我尝试了Robert Levy的建议,捕获了主面板<Grid TouchDown="TouchDetected">上的TouchDown事件,并打印出了结果标记值
private void TouchDetected(object sender, TouchEventArgs e)
{
if (e.TouchDevice.GetIsTagRecognized())
{
var tagData = e.TouchDevice.GetTagData();
Console.WriteLine("Touch_VALUE: " + tagData.Value);
}
else
{
Console.WriteLine("No Tag recognized.");
var tagData = e.TouchDevice.GetTagData();
Console.WriteLine("No_Touch_VALUE: " + tagData.Value);
}
}因为它总是返回0,所以我尝试了一种不同的方法,并使用单个TagVisualizationDefinition向主窗口添加了一个TagVisualizer (否则不会调用事件VisualizationAdded )
<s:TagVisualizer x:Name="MyTagVisualizer"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
Background="Transparent"
Width="auto"
Height="auto">
<s:TagVisualizer.Definitions>
<s:TagVisualizationDefinition
Source="UserControls/ProductMenuVisualization.xaml"/>
</s:TagVisualizer.Definitions>
</s:TagVisualizer>即使只有一个Defintion i,也会为每个标记触发事件,我可以将值添加到字典中,并检查它是否已经添加。
如果您想知道,我在代码中订阅了事件
MyTagVisualizer.VisualizationAdded += AddProductMenu;
MyTagVisualizer.VisualizationRemoved += RemoveProductMenu;
MyTagVisualizer.VisualizationMoved += MoveProductMenu;它不是完美的,但它是有效的。
https://stackoverflow.com/questions/57453705
复制相似问题