C# 右键单击Silverlight 4应用程序中的列表框
我试图在Winforms应用程序中实现我过去认为理所当然的东西。我是一个Silverlight noob,所以希望所有这些都是基本的 我在Silverlight 4应用程序中有一个列表框。我想做以下几点: 右键单击列表框 将项目放在我单击高亮显示的位置下 我想要一个上下文菜单,在上下文菜单中弹出我自己的项目 从我到目前为止的研究来看,Silverlight中似乎没有ContextMenu结构,相反,我们必须构建一个网格/画布结构,并将其附加到弹出对象,然后弹出该对象 我的问题如下: 为了完成2,我需要对列表框进行某种命中测试。我不知道该怎么做,我的谷歌浏览器也帮不上忙。 一旦我确定了鼠标下的索引,我实际上如何选择该项? 是否有可重用的上下文菜单组件可供我使用?如果组件允许使用任意子菜单,则额外增加积分。 有一件事。如果将其绑定到列表框上: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,
鼠标按钮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;
}