我的表单中有一个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对象上不存在
答案 0 :(得分:0)
一种更简单的方法是将事件处理程序附加到ListBoxItem
或ItemTemplate
中的根元素上。您将找到一个示例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
}