Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 右键单击Silverlight 4应用程序中的列表框_C#_Menu_Silverlight 4.0_Right Click_Hittest - Fatal编程技术网

C# 右键单击Silverlight 4应用程序中的列表框

C# 右键单击Silverlight 4应用程序中的列表框,c#,menu,silverlight-4.0,right-click,hittest,C#,Menu,Silverlight 4.0,Right Click,Hittest,我试图在Winforms应用程序中实现我过去认为理所当然的东西。我是一个Silverlight noob,所以希望所有这些都是基本的 我在Silverlight 4应用程序中有一个列表框。我想做以下几点: 右键单击列表框 将项目放在我单击高亮显示的位置下 我想要一个上下文菜单,在上下文菜单中弹出我自己的项目 从我到目前为止的研究来看,Silverlight中似乎没有ContextMenu结构,相反,我们必须构建一个网格/画布结构,并将其附加到弹出对象,然后弹出该对象 我的问题如下: 为了完成2,

我试图在Winforms应用程序中实现我过去认为理所当然的东西。我是一个Silverlight noob,所以希望所有这些都是基本的

我在Silverlight 4应用程序中有一个列表框。我想做以下几点:

右键单击列表框 将项目放在我单击高亮显示的位置下 我想要一个上下文菜单,在上下文菜单中弹出我自己的项目 从我到目前为止的研究来看,Silverlight中似乎没有ContextMenu结构,相反,我们必须构建一个网格/画布结构,并将其附加到弹出对象,然后弹出该对象

我的问题如下:

为了完成2,我需要对列表框进行某种命中测试。我不知道该怎么做,我的谷歌浏览器也帮不上忙。 一旦我确定了鼠标下的索引,我实际上如何选择该项? 是否有可重用的上下文菜单组件可供我使用?如果组件允许使用任意子菜单,则额外增加积分。 有一件事。如果将其绑定到列表框上:


鼠标按钮Ventargs将通过GetPosition方法为您提供位置。

我一直在寻找相同的东西。我在CodePlex查看了示例,这是一个非常方便的资源,以下是我发现的解决方案:

为列表框创建ItemTemplate

在要右键单击ItemTemplate的部分中,设置System.Windows.Controls.Input.Toolkit命名空间中存在的附加属性ContextMenuService.ContextMenu

将MenuItem控件添加到ContextMenu,并将Click属性设置为相应的Click事件处理程序

在事件处理程序中,从发送方获取DataContext,您可以使用它在ListBox中查找相应的元素

要选择该元素,只需将列表框中的SelectedItem属性设置为它

向事件处理程序添加任何自定义逻辑

示例页面中有一个示例,只需从导航窗格转到输入->上下文菜单

如果你想要简洁的东西,这里有一个简化的例子:

<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>
守则:

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;
    }
我希望这有助于:

<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;
    }