您可以使用GridViewItem上的PointerPressed/PointerReleased事件來獲得您從RightTapped或ManipulationCompleted獲得的相同效果。
<ListView
Margin="120,80,0,0"
SelectionMode="Multiple">
<ListView.ItemContainerStyle>
<Style
TargetType="ListViewItem">
<Setter
Property="Width"
Value="100" />
<Setter
Property="Height"
Value="100" />
</Style>
</ListView.ItemContainerStyle>
<ListViewItem
RightTapped="ListViewItem_RightTapped_1"
PointerPressed="ListViewItem_PointerPressed_1"
PointerReleased="ListViewItem_PointerReleased_1"
ManipulationStarted="ListViewItem_ManipulationStarted_1">
<Rectangle
Height="80"
Width="80"
Fill="Red" />
</ListViewItem>
</ListView>
。
private void ListViewItem_RightTapped_1(object sender, RightTappedRoutedEventArgs e)
{
Debug.WriteLine("Tap");
}
private void ListViewItem_PointerPressed_1(object sender, PointerEventArgs e)
{
Debug.WriteLine("Press");
}
private void ListViewItem_ManipulationStarted_1(object sender, ManipulationStartedRoutedEventArgs e)
{
Debug.WriteLine("Manipulating");
}
private void ListViewItem_PointerReleased_1(object sender, PointerEventArgs e)
{
Debug.WriteLine("Release");
}
}
輸出:
新聞 發佈 新聞 發佈
*編輯
對不起,我必須以某種方式,這些事件與觸摸和鼠標的工作方式不同錯過了。我認爲你得到的答案可能是最好的。否則 - 你需要實現你自己的ListView版本。你可以嘗試向他們施壓,希望能夠在未來版本中獲得更好的解決方案,但我不希望在那裏有太多的希望。從我記得的地方 - ContextMenus不是非常地鐵,有更好的UX解決方案比右鍵菜單。您可以在AppBar中或在選擇項目後打開的詳細信息頁面中顯示命令。這可能比試圖破解某種從未被設計爲支持的解決方法更好。
非常感謝你的回答,菲利普。其實我讀了Metro UI的規格,我知道PopupMenu的非地鐵實體。在決定使用PopupMenu來支持AppBar之前,我花了相當長的時間來處理我想要討論的特定場景。我甚至做出了一個正反兩面的表格來使這個決定得到很好的論證;)但是我會再次重新考慮它,也許真的會去AppBar。無論如何,通過我原來的問題,我也許發現自己也是一個解決方案。我會在這裏發佈,並有興趣聽取您的意見... –