首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何识别pixelsense中是否添加了标签?

如何识别pixelsense中是否添加了标签?
EN

Stack Overflow用户
提问于 2019-08-12 05:22:04
回答 2查看 43关注 0票数 1

我有一个pixelsense桌面,想要识别是否添加了标签。由于硬件比较陈旧,很难找到信息。Here我可以找到一个如何识别标签的例子,但只能使用预定义的值:

代码语言:javascript
复制
<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类中,我发现了以下事件:

代码语言:javascript
复制
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事件。

EN

回答 2

Stack Overflow用户

发布于 2019-08-13 07:02:32

您可以在任何元素上使用ContactDown事件来查看任何表面输入。在这个事件上有一个Contact.ContactType属性,它应该告诉你它是一个标签,然后Contact.TagValue告诉你它的值。这甚至和它的同行的行为与MouseDown和它的同行是一样的。

对于TagVisualizer,这样做的目的是简化使用标记所需的大量公共代码,而不仅仅是检测它们。一般来说,您需要一个数据库来定义您所关心的标记值,以及这些标记相对于物理对象的位置。一个不错的做法是在数据库中查询所有这些信息,然后将TagVisualizer配置为查找所有您关心的标签。配置大量的定义不会对性能产生明显的影响。

顺便说一句,对于API文档,你应该会在SDK安装中看到一个.chm文件,它允许你离线阅读文档,因为它们不再可以在线访问。

这都是凭记忆写的,所以我希望它在一定程度上是准确和有帮助的!

(免责声明: Surface dev platform的前PM )

票数 1
EN

Stack Overflow用户

发布于 2019-08-15 17:34:27

我尝试了Robert Levy的建议,捕获了主面板<Grid TouchDown="TouchDetected">上的TouchDown事件,并打印出了结果标记值

代码语言:javascript
复制
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 )

代码语言:javascript
复制
<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,也会为每个标记触发事件,我可以将值添加到字典中,并检查它是否已经添加。

如果您想知道,我在代码中订阅了事件

代码语言:javascript
复制
MyTagVisualizer.VisualizationAdded += AddProductMenu;
MyTagVisualizer.VisualizationRemoved += RemoveProductMenu;
MyTagVisualizer.VisualizationMoved += MoveProductMenu;

它不是完美的,但它是有效的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57453705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档