1

我正在开发一个 Windows 8 Metro 应用程序,它以下列方式使用语义缩放:

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

  • 缩小视图包含另一个ListView显示一个简单列表的列表,该列表显示放大视图中控件的一些状态信息。这个 ListView的ItemsSource属性动态地填充了在视图激活时创建的普通对象。这个 ListView 有IsItemClickEnabled="True".

我想要什么:

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

相反会发生什么:

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

所以,我的问题是:

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

非常感谢!

4

2 回答 2

5

我找到了解决方案。我必须控制为列表Tapped定义的控件的事件,而DataTemplate不是ListView自身的事件:

<SemanticZoom...>
    <SemanticZoom.ZoomedOutView>
        <ListView ...>
            <ListView.ItemTemplate>
                <DataTemplate>
                    <Border ... Tapped="Item_Tapped">

Item_Tapped方法中,我只是投射senderFrameworkElement查看它的DataContext.

于 2012-07-19T09:14:05.187 回答
1

在 Windows 8 中不再有点击事件,而是有手势(即 Tapped、RightTapped、Holding)和指针(即 Pressed、Release、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;
    }
}

希望这有帮助。

于 2012-06-27T12:08:37.547 回答