编程语言
首页 > 编程语言> > c#-在Silverlight 4应用程序中的列表框上单击鼠标右键

c#-在Silverlight 4应用程序中的列表框上单击鼠标右键

作者:互联网

我正在尝试实现以前在Winforms应用程序中理所当然的功能.我是Silverlight新手,所以希望所有这些内容都是基本的.

我在Silverlight 4应用程序中有一个列表框.我想做以下事情:

>右键单击列表框
>将项目放在我点击突出显示的位置下方
>我想弹出一个上下文菜单(上下文菜单中有我自己的项目)

到目前为止,从我的研究来看,似乎在Silverlight中没有ContextMenu构造,相反,我们必须构建一个Grid / Canvas结构并将其附加到Popup对象,然后弹出该对象.

我的问题如下:

>要完成第二项,我需要在列表框中进行某种命中测试.我不知道该怎么做,而我的google-fu也帮不上忙.
>确定鼠标下的索引后,如何实际选择该项目?
>我可以在某个地方使用可重用的上下文菜单组件吗?如果组件允许任意子菜单,则可额外获得积分.

解决方法:

我一直在寻找相同的东西.我在CodePlex上检查了Silverlight Control Toolkit,并仔细阅读了样本(这是非常方便的资源),以下是我发现的解决方案:

>为您的列表框创建一个ItemTemplate
>在您要对ItemTemplate进行“右键单击”的部分中,设置System.Windows.Controls.Input.Toolkit命名空间中存在的附加属性ContextMenuService.ContextMenu
>将MenuItem控件添加到ContextMenu并将Click属性设置为相应的click事件处理程序
>在事件处理程序中,从发送方获取DataContext(您可以使用它在ListBox中找到相应的元素)
>要使该元素处于选中状态,只需在列表框中为其设置SelectedItem属性
>将任何自定义逻辑添加到事件处理程序

样本页面中有一个示例,只需从导航窗格中转到“ Input-> ContextMenu”.

如果您想简洁明了,下面是一个简化的示例:

<ListBox ItemsSource="{StaticResource People}"
             Name="myListBox">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Name}">
                    <controlsInputToolkit:ContextMenuService.ContextMenu>
                        <controlsInputToolkit:ContextMenu>
                            <controlsInputToolkit:MenuItem Header="Show in MessageBox"
                                                           Click="show_Click" />
                        </controlsInputToolkit:ContextMenu>
                    </controlsInputToolkit:ContextMenuService.ContextMenu>
                </TextBlock>
            </DataTemplate>
        </ListBox.ItemTemplate>
</ListBox>

与:

xmlns:controlsInputToolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input.Toolkit"

对于代码:

private void show_Click(object sender, RoutedEventArgs e)
    {
        var person = ((MenuItem)sender).DataContext as Person;
        if (null == person) return;
        MessageBox.Show("My Name is: " + person.Name);
        myListBox.SelectedItem = person;
    }

我希望这有帮助 :)

标签:hittest,right-click,menu,silverlight-4-0,c
来源: https://codeday.me/bug/20191106/1999264.html