2012-06-26 131 views
1

我開發使用語義縮放通過以下方式在Windows 8 Metro應用:可以通過單擊或左擊來選擇ListView項目嗎?

  • 在查看縮放包含複雜的控制功能,允許用戶交互的ListView(通過使用文本框和按鈕控件),因此這個ListView有IsItemClickEnabled="False"。用戶必須手動觸發縮小視圖。

  • 縮小視圖包含另一個ListView,它顯示一個簡單的列表,顯示放大視圖中控件的某些狀態信息。這個ListView的ItemsSource屬性在視圖處於活動狀態時被創建的純對象填充。這個ListView有IsItemClickEnabled="True"

我想要什麼:

當縮小視圖上的項目的用戶敲擊或點擊,放大後的視圖應該激活和匹配的點擊項目的控制應該可見(放大ListView允許滾動,所以控件可以隱藏)。只要單擊某個項目時觸發SelectionChanged事件,我就知道如何執行此操作。

,而不是會發生什麼:

當一個項目的用戶敲擊或點擊在縮小視圖,該視圖中的縮放自動激活和不觸發SelectionChanged事件。但是,如果使用右鍵單擊或Ctrl +單擊,它可以正常工作。

所以,我的問題是:

有沒有什麼辦法讓一個ListView觸發項目點擊或單擊左側SelectionChanged事件,除了右點擊Ctrl +單擊?如果沒有,我如何檢測水龍頭或左鍵點擊?

非常感謝!

回答

5

我找到了解決方案。我必須控制Tapped事件是定義DataTemplate內的名單中,ListView本身不是事件的控制:

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

而在Item_Tapped方法,我只投senderFrameworkElement並查看其DataContext

1

在Windows 8中沒有更多的點擊事件,而是有手勢(即Tapped,RightTapped,Holding)和指針(即按下,釋放,移動)。 從此開始,您可以根據使用的輸入設備(即鼠標,筆,觸摸)通過開關處理不同的情況。

這裏有一小段代碼作爲例子。

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

希望得到這個幫助。

相關問題