Как выбрать список в индексе, щелкнув правой кнопкой мыши? - PullRequest
0 голосов
/ 16 мая 2019

У меня есть ContextFlyout в моей форме, и я хочу, чтобы список выбирал индекс, где указатель мыши находится при щелчке правой кнопкой мыши

Изначально я думал, что смогу воспользоваться преимуществом события RightTapped, поэтому создал обработчик событий, но, заполняя метод, я не видел способа перевести положение мыши в элемент в списке.

Событие RightTapped

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

Я просмотрел все методы и свойства, но не могу найти то, что мне нужно. Я нашел много решений для WPF, но это UWP, и эти методы не существуют для этих объектов UWP

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

Я понял, как это сделать.Во-первых, и мой MenuFlyout, и элементы для списка генерируются программно.

Создание 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

Метод для события 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
}
0 голосов
/ 16 мая 2019

Более простой подход - прикрепить обработчик событий к ListBoxItem или корневому элементу в ItemTemplate.Вы найдете пример того, как вы могли бы сделать это здесь .

...