我正在开发一个使用语义缩放的Windows 8 metro应用程序,方法如下:
放大视图包含一个ListView
,其中包含允许用户交互的复杂控件(通过使用TextBox和Button控件),因此此ListView具有IsItemClickEnabled="False"
。用户必须手动触发缩小视图。
缩小视图包含另一个ListView
,它显示一个简单列表,显示放大视图中控件的某些状态信息。此ListView的ItemsSource
属性使用在视图处于活动状态时创建的普通对象进行动态填充。此ListView具有IsItemClickEnabled="True"
。
我想要什么:
当用户点击或点击缩小视图中的项目时,应该激活放大的视图,并且应该使与所单击项目匹配的控件可见(放大的ListView允许滚动,因此可以隐藏控件) 。只要在单击某个项目时触发SelectionChanged
事件,我就知道如何执行此操作。
会发生什么:
当用户点按或点击缩小视图中的项目时,放大视图会自动激活,不会触发SelectionChanged
事件。但是,使用右键单击或Ctrl +单击时,它可以正常工作。
所以,我的问题是:
除了右击和Ctrl +点击之外,还有什么办法让ListView触发项目点击或左键单击SelectionChanged
事件?如果没有,我如何检测点击或左键点击?
非常感谢!
答案 0 :(得分:5)
我找到了解决方案。我必须控制列表中定义的Tapped
内的控件的DataTemplate
事件,而不是ListView
本身的事件:
<SemanticZoom...>
<SemanticZoom.ZoomedOutView>
<ListView ...>
<ListView.ItemTemplate>
<DataTemplate>
<Border ... Tapped="Item_Tapped">
在Item_Tapped
方法中,我只是将sender
投射到FrameworkElement
并查看其DataContext
。
答案 1 :(得分:1)
Windows 8中没有更多点击事件,而是有手势(即Tapped,RightTapped,Holding)和指针(即Pressed,Released,Moved)。 从这开始,您可以通过切换不同的情况来处理,具体取决于所使用的输入设备(即鼠标,笔,触摸)。
这里有一小段代码。
void MyElement_Holding(object sender, Windows.UI.Input.HoldingEventArgs e)
{
switch (e.PointerDeviceType)
{
case PointerDeviceType.Mouse:
break;
case PointerDeviceType.Pen:
break;
case PointerDeviceType.Touch:
break;
}
}
希望得到这个帮助。