这是交互元素中交互元素的古老问题,但我希望ScatterViewItem包含其他表面交互元素,如SurfaceButton或SurfaceCheckBox.我已经拥有了所有元素,他们对点击等做出反应.问题是,一旦我点击了一个不包含控件的区域,我只能得到正常的ScatterView行为.
即使联系人位于SurfaceButton或SurfaceCheckbox上,是否有优雅的解决方案允许拖动?
例如
<s:ScatterView >
<Grid Width="200" Height="200">
<s:SurfaceButton />
</Grid>
</s:ScatterView>
Run Code Online (Sandbox Code Playgroud) 我希望能够通过蓝牙将Microsoft PixelSense硬件与多个移动设备配对,我希望PixelSense知道哪个设备是哪个.因此,如果我将两部手机放在桌面上,PixelSense应该能够按设备名称标记它们.我最初的想法是让手机显示一个身份标签,该标签已编码其蓝牙MAC地址,以便它可以关联它们,但PixelSense看到红外线,无法读取手机屏幕,因此想法已经消失.谁能想到另一种方法呢?
对于我的应用程序,我想使用所有内置的操作可能性,例如缩放.但是如果用户在屏幕上按下3个手指,我想显示特定的UI元素.那么检查用户是否同时按下3个手指并且屏幕上彼此相邻的最佳方法是什么?(不禁用内置操作可能性).
我的第一种方法是在我的布局的顶部Grid元素上注册TouchDown事件.在事件处理程序中,我得到了联系人.但那里该怎么办?
只需检查联系人是否是指纹,将其存储在列表中,并检查列表是否已包含两个类似的联系人?
还是有更性感的解决方案?
谢谢!
编辑:
根据答案我写了两个方法:
private void OnContactDown(object sender, ContactEventArgs e)
{
if (this.ContactsOver.Count == 3)
{
Console.WriteLine("3 contacts down. Check proximity");
if (areNear(this.ContactsOver))
{
Console.WriteLine("3 fingers down!");
}
}
}
private Boolean areNear(ReadOnlyContactCollection contacts)
{
if ( Math.Abs(contacts.ElementAt(0).GetCenterPosition(this).X - contacts.ElementAt(1).GetCenterPosition(this).X) < 100 &&
Math.Abs(contacts.ElementAt(0).GetCenterPosition(this).Y - contacts.ElementAt(1).GetCenterPosition(this).Y) < 100 &&
Math.Abs(contacts.ElementAt(1).GetCenterPosition(this).X - contacts.ElementAt(2).GetCenterPosition(this).X) < 100 &&
Math.Abs(contacts.ElementAt(1).GetCenterPosition(this).Y - contacts.ElementAt(2).GetCenterPosition(this).Y) < 100 &&
Math.Abs(contacts.ElementAt(0).GetCenterPosition(this).X - contacts.ElementAt(2).GetCenterPosition(this).X) < 100 &&
Math.Abs(contacts.ElementAt(0).GetCenterPosition(this).Y - contacts.ElementAt(2).GetCenterPosition(this).Y) < 100)
{
return true;
}
else …Run Code Online (Sandbox Code Playgroud) 我是WPF用于触摸屏的新手,我在解释操作事件时遇到了麻烦.我想要做的是相当简单我相信:当用户捏住UserControl上的任何地方时,它将执行一个动作.
所以,在我的控件中(这是Surface 2.0/Windows Touch):
XAML
<Grid Background="White" IsManipulationEnabled="True"
ManipulationStarting="Grid_ManipulationStarting"
ManipulationDelta="Grid_ManipulationDelta">
<!--Some content controls-->
</Grid>
Run Code Online (Sandbox Code Playgroud)
C#
private void Grid_ManipulationStarting(object sender, ManipulationStartingEventArgs e)
{
e.ManipulationContainer = this;
}
private void Grid_ManipulationDelta(object sender, ManipulationDeltaEventArgs e)
{
//do the thing... you know, that thing you do
}
Run Code Online (Sandbox Code Playgroud)
但是,当我在屏幕上搓手时,这些事件都不会触发.我想在这种情况下我不能理解事件的路由.我的显示器(3M MicroTouch PX)在ScatterViewItems中理解触摸事件或内置操作时没有遇到任何问题.
编辑:我从网格内部删除了控件,他们现在开火,所以我猜测内容正在拦截操纵.对不起,应该更清楚控件的内容,因为它们似乎是问题所在.
具体来说,我认为这与我在里面有一个SurfaceListBox的事实有关.我想象SurfaceListBox是拦截操作.有没有办法告诉它要走开?我仍然试图围绕WPF做事件的方式.
Edit2:要粘贴一些更完整的代码.
SEMANTICPANEL.XAML FULL
<UserControl x:Class="SemanticZoom.SemanticPanel"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:SemanticZoom"
xmlns:views="clr-namespace:SemanticZoom.Views"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<UserControl.Resources>
</UserControl.Resources>
<Grid Background="White" IsManipulationEnabled="True" ManipulationStarting="Grid_ManipulationStarting" ManipulationDelta="Grid_ManipulationDelta">
<views:CategoryView x:Name="CategoryView"/>
<views:ShelfView x:Name="ShelfView" Visibility="Hidden" />
<views:BookView x:Name="BookView" Visibility="Hidden" />
</Grid> …Run Code Online (Sandbox Code Playgroud) 我正在尝试制作一个将在MS Surface平板电脑上使用并尝试在VS 2015上创建Surface项目的应用程序.当我发现Surface项目不是VS 2015中已安装模板的一部分时,我试图下载SDK只是为了发现它需要VS 2010才能使用它.在注意到这一点之后,我开始认为不再使用Surface 2.0 SDK,但我想在开始寻找替代方案之前确保.如果是这种情况,可以使用哪些其他类型的模板为MS Surface平板电脑创建应用程序?
我想将表面笔功能集成到我的应用程序中.它是用Delphi 10 Seattle编写的.我在网上搜索过,找不到任何东西.
有谁知道如何为笔编程?具体来说,要捕捉压力水平,笔下,笔和笔移动事件.
最近我很幸运地参与了微软为即将到来的"贸易展"编写教育游戏的Surface项目.我真的可以看到Surface的协作性和自然交互如何在教育空间中是巨大的,我真的不能对"普通"机器上的触摸或多点触摸感到兴奋.
我可以看到多点触控在iPhone这样的移动机器中是多么有用,但我只是看不出为什么或者为什么我要把我的粘手指放在我的台式机或笔记本电脑上,或者什么软件会真正利用它它(特别是如果它被限制为"仅仅"2个输入.我想我用鼠标调整图片的速度比从鼠标到屏幕调整图片要快得多:)
我不明白吗?是否有人正致力于激动人心的多点触控应用程序?:)
我想编写一个支持触摸事件的WPF应用程序.但是,我有一个问题.我为Windows Touch安装了Windows Surface工具包,但是当我点击然后将鼠标移到它上面时,没有提出Grid的Manipulation-events(ManipulationStarting,ManipulationDelta等).
谁能告诉你如何使用Windows Surface工具包的库在WPF for Windows 7中捕获操作事件?
提前致谢.
我正在尝试实现类似浏览器的小应用程序,这将允许我修改查看的网站外观(例如,使链接的字体更大).它专为Microsoft Surface设计,可用于巨大的触摸屏.它使用WPF作为UI.
我打算使用WebBrowser控件来完成此任务.但是,文档中有两个名为WebBrowser的类.其中一个在System.Windows.Forms,另一个在System.Windows.Controls.第一个提供对DOM模型的访问,但是适用于Forms应用程序(如果我理解正确,那绝对不是我拥有的).如果在xaml中添加控制器,则默认添加第二个,但它不提供对DOM的访问.
那么,我如何从WebBrowser for Surface访问DOM模型?我是c#和Microsoft技术的新手,所以如果我的问题不清楚或明显,我会道歉.
我在Microsoft Surface应用程序中以波形格式捕获音频文件.现在出于文件大小的原因,我想将wave文件转换为mp3文件.我在互联网上读到这样做的好处是使用跛脚.
但是如何从我的应用程序中调用此exe文件?以及如何将其包含在我的应用程序中?
我有一个表面项目,我想使用Blend设计的控件.我将这些控件添加到我的microsoft表面项目中,但是当我尝试编译它时收到错误.
Error 1 The tag 'VisualStateManager.VisualStateGroups' does not exist in XML namespace
'http://schemas.microsoft.com/winfx/2006/xaml/presentation'. Line 12 Position 4.
UserControl1.xaml 12 4
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?我可以在Surface应用程序中使用VisualStateManager吗?
我正在努力使用MS Surface项目上的TagVisualizer控件.理论上,控制似乎很棒,允许您响应来自现实世界物理对象的输入
问题是控件将覆盖整个屏幕(因为我想在整个屏幕上捕获标签),因此,我的应用程序中没有其他控件将接收触摸事件.(除非,它们是视觉树中的直接上升者).
在我的应用程序中,我希望有一种"层"类型的方法,其中每个层都可以响应(联系)输入:
Window
`- Grid
`- LayersPanel
`- TagVisualizer
`- Layer 1
`- Layer 2
`- Layer 3
`- Layer 4
Run Code Online (Sandbox Code Playgroud)
现在我把标签可视化器放在哪里并不重要,它总是会窃取来自所有或其他层的联系事件.(由于RoutedEvents的性质)
对我而言,控件在实践中似乎完全没用,因为它总会干扰应用程序的其他控件.我在这里错过了什么?
所以我的问题是:关于如何解决这个问题的任何建议?有没有人在类似的场景中使用TagVisualizers?如果是这样,你是如何解决这个问题的?
顺便说一下,这些层都可以正常工作,因为它们只会窃取直接位于其子元素之上的事件(图层的其余部分对于命中测试是不可见的)
我有一个SurfaceListBox里面有一个ScrollViewer。我可以访问它,ScrollViewer并且我想检测滚动结束的时间。由于它是一个触摸应用程序,可以拖动它,因此,我现在正在检测到PreviewTouchUp要执行的操作,但是,如果像我在智能手机上那样快速滑动,因为的内容ScrollViewer仍在拖动/ scrolling,PreviewTouchUp不会反映滚动结束,而是在之前触发。
我曾尝试Manipulation事件和其他几个人同时在ScrollViewer和SurfaceListBox。我也尝试过ScrollViewer.PanningDeceleration,说实话,我看不出有什么不同。到目前为止,基本上没有运气。
因此,即使在PreviewTouchUp中,我也如何检测滚动的结束ScrollViewer?
pixelsense ×13
wpf ×7
c# ×6
.net ×1
bluetooth ×1
browser ×1
delphi ×1
dom ×1
lame ×1
mp3 ×1
multi-touch ×1
pen ×1
scatterview ×1
scroll ×1
scrollviewer ×1
surface ×1
touch ×1
windows-7 ×1
wpftoolkit ×1