【问题标题】:Get ListBox item for ContextMenu on item press在项目按下时获取 ContextMenu 的 ListBox 项目
【发布时间】:2013-06-24 01:19:01
【问题描述】:

我在使用 ListBox 中的 ContextMenu 时遇到问题。我的 ContextMenu 的一个项目用于通过查询字符串将项目的名称传递到我的应用程序中的另一个页面。截至目前,我正在使用我的 ListBox 的 SelectionChanged 事件来检索所选项目的名称,但这需要用户按下然后释放项目以注册事件。我希望能够在用户按下 ListBox 项目以访问 ContextMenu 时获得按下的项目的名称,而无需按下。

请注意,我已经尝试使用 ListBox 的 KeyDown 事件来实现此目的,但它也不起作用。我可以使用什么事件来满足这个要求?

【问题讨论】:

    标签: windows-phone-7 xaml listbox windows-phone-8


    【解决方案1】:

    如果您在列表框中为列表框项使用绑定,则可以使用 ContextMenu 的 MenuItem 的标记属性。 绑定标签使用

    <toolkit:ContextMenuService.ContextMenu>
    <toolkit:ContextMenu Background="{StaticResource PhoneChromeBrush}">
    <toolkit:MenuItem Foreground="{StaticResource PhoneForegroundBrush}" Header="Send" Name="Send" Tag="{Binding Name}" Click="Send_Click_1"/>
    </toolkit:ContextMenuService.ContextMenu>
    

    当您点击 ContextMenuItem 时,您可以使用标签访问标签

    var name = ((MenuItem)sender).Tag.ToString();
    

    如果您使用绑定属性,则可以使用此语句访问列表框项

    var listBoxItemName= ((MenuItem)sender).DataContext as ListBoxItemClass;
    

    这里,ListBoxItemClass 是您用于绑定属性的类的名称。 试试这个,希望你得到你想要的

    【讨论】:

    • 谢谢,虽然我实际上需要在按下时获取 ListBox 项的名称以及我选择的 ContextMenu 项。如何从获取 ContextMenu 项的名称到获取 ListBox 项的名称更上一层楼?
    • 我建议您使用另一行语句,当您选择 ContextMenu 项目时,您可以通过该语句获取 ListBoxItem。请检查并通知我。
    • 我不确定您所说的 ListBoxItemClass 是什么意思。相反,我输入了ListBoxItem,尽管在调试时listBoxItemName 仍然为空?
    • ListBoxItemClass 是您可以与 System.Collections.ObjectModel.ObservableCollection 一起使用的类,用于绑定 ListBox ItemSource。您是否使用 ObservableCollection?
    • @Matthew 提供您用来显示 ListBox 的完整代码,这样会更有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    相关资源
    最近更新 更多