只需点击一下或左键单击即可选择ListView项目?

时间:2012-06-26 15:56:48

标签: windows-8 microsoft-metro semantic-zoom

我正在开发一个使用语义缩放的Windows 8 metro应用程序,方法如下:

  • 放大视图包含一个ListView,其中包含允许用户交互的复杂控件(通过使用TextBox和Button控件),因此此ListView具有IsItemClickEnabled="False"。用户必须手动触发缩小视图。

  • 缩小视图包含另一个ListView,它显示一个简单列表,显示放大视图中控件的某些状态信息。此ListView的ItemsSource属性使用在视图处于活动状态时创建的普通对象进行动态填充。此ListView具有IsItemClickEnabled="True"

我想要什么:

当用户点击或点击缩小视图中的项目时,应该激活放大的视图,并且应该使与所单击项目匹配的控件可见(放大的ListView允许滚动,因此可以隐藏控件) 。只要在单击某个项目时触发SelectionChanged事件,我就知道如何执行此操作。

会发生什么:

当用户点按或点击缩小视图中的项目时,放大视图会自动激活,不会触发SelectionChanged事件。但是,使用右键单击或Ctrl +单击时,它可以正常工作。

所以,我的问题是:

除了右击和Ctrl +点击之外,还有什么办法让ListView触发项目点击或左键单击SelectionChanged事件?如果没有,我如何检测点击或左键点击?

非常感谢!

2 个答案:

答案 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;
    }
}

希望得到这个帮助。