如何通过右键单击在索引处选择列表框?

时间:2019-05-16 13:15:23

标签: c# xaml uwp uwp-xaml

我的表单中有一个ContextFlyout,我希望列表框选择鼠标右键单击时的索引

本来我以为我可以利用RightTapped事件,所以我创建了一个事件处理程序,但是在填写该方法时,我没有看到任何将鼠标的位置转换为列表框中项目的方法。 / p>

RightTapped事件

private void SideMenu_RightClick(object sender, RightTappedRoutedEventArgs e) {
    ListBox menu = (ListBox)sender;
    SideMenu.SelectedIndex = menu.IndexFromPoint(e.);
    menu.
}

我已经仔细研究了所有方法和属性,但似乎找不到我需要的东西。我找到了很多WPF解决方案,但这是UWP,这些方法在这些UWP对象上不存在

2 个答案:

答案 0 :(得分:0)

一种更简单的方法是将事件处理程序附加到ListBoxItemItemTemplate中的根元素上。您将找到一个示例here

答案 1 :(得分:0)

我想出了办法。首先,我的MenuFlyout和用于列表框的项目都是以编程方式生成的。

创建菜单弹出

//this is a property in the class
internal MenuFlyout rightclick = new MenuFlyout();

//In Page's Constructor
this.InitializeComponent();
MenuFlyoutItem mfi = new MenuFlyoutItem();
mfi.Text = "Copy";
rightclick.Items.Add(mfi);
mfi = new MenuFlyoutItem();
mfi.Text = "Delete";
rightclick.Items.Add(mfi);
rightclick.Opened += rightclick_opened;  //run method when flyout is opened

打开事件的方法

private void rightclick_opened(object sender, object e) {
    MenuFlyout mf = (MenuFlyout)sender;
    SideMenu.SelectedItem = mf.Target;    //makes the magic happen
}

实例化ListBoxItems

private void NewLocation(object sender, RoutedEventArgs e) {
    Location newLocation = new Location(); //custom class
    ListBoxItem nl = new ListBoxItem();    //creates empty ListBoxItem
    nl.Content = newLocation.objectName; //give listboxitem default name from the class constructor
    nl.ContextFlyout = rightclick;         //set contextflyout for item
    SideMenu.Items.Add(nl);                //add new item to listbox
    locations.Add(newLocation);            //add new object to "linked" list
    SideMenu.SelectedIndex = locations.Count - 1; //set current selected to new item
}