Silverlight 如何在右键单击事件中突出显示列表框的项目?
我不知道我是否是第一个问这个问题的人。我搜索了整个棋盘,但没有找到任何答案。正如标题中所说,每当我右键单击列表框中的某个项目时,我都会尝试高亮显示/选择该项目 以下是XAML代码:Silverlight 如何在右键单击事件中突出显示列表框的项目?,silverlight,listbox,right-click,Silverlight,Listbox,Right Click,我不知道我是否是第一个问这个问题的人。我搜索了整个棋盘,但没有找到任何答案。正如标题中所说,每当我右键单击列表框中的某个项目时,我都会尝试高亮显示/选择该项目 以下是XAML代码: <ListBox Grid.Row="1" x:Name="ContactList" Margin="6" ItemsSource="{Binding ''}"> <ListBox.ItemTemplate> <DataTemplate>
<ListBox Grid.Row="1" x:Name="ContactList" Margin="6" ItemsSource="{Binding ''}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="{Binding Status_Image}" Margin="0,0,3,0" />
<StackPanel Orientation="Vertical">
<TextBlock Height="20" HorizontalAlignment="Left" Text="{Binding Name}" FontWeight="Bold" FontSize="13" Foreground="Black" />
<TextBlock Height="20" HorizontalAlignment="Left" Text="{Binding Message}" FontSize="11" Foreground="Gray" />
</StackPanel>
<Image Source="{Binding NotifImg}" Margin="8,0,0,0"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<ListBox Grid.Row="1" x:Name="ContactList"ItemsSource="{Binding ''}" MouseRightButtonDown="ContactList_MouseRightButtonDown" MouseRightButtonUp="ContactList_MouseRightButtonUp">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" >
<TextBlock Height="20" HorizontalAlignment="Left" Text="{Binding Name}" FontWeight="Bold" FontSize="13" Foreground="Black" />
<TextBlock Height="20" HorizontalAlignment="Left" Text="{Binding Message}" FontSize="11" Foreground="Gray" />
<Image Source="{Binding NotifImg}" Margin="8,0,0,0"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
我知道如何处理右键单击,并在按钮或单个元素上显示上下文菜单,但在绑定的列表框上却没有。如果你对我应该如何进行有任何建议,请随时告诉我,因为我目前陷入困境
谢谢你,Ephismen。好吧,我找到了一个非常简单和干净的方法来实现我想做的事情 以下是XAML代码:
<ListBox Grid.Row="1" x:Name="ContactList" Margin="6" ItemsSource="{Binding ''}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="{Binding Status_Image}" Margin="0,0,3,0" />
<StackPanel Orientation="Vertical">
<TextBlock Height="20" HorizontalAlignment="Left" Text="{Binding Name}" FontWeight="Bold" FontSize="13" Foreground="Black" />
<TextBlock Height="20" HorizontalAlignment="Left" Text="{Binding Message}" FontSize="11" Foreground="Gray" />
</StackPanel>
<Image Source="{Binding NotifImg}" Margin="8,0,0,0"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<ListBox Grid.Row="1" x:Name="ContactList"ItemsSource="{Binding ''}" MouseRightButtonDown="ContactList_MouseRightButtonDown" MouseRightButtonUp="ContactList_MouseRightButtonUp">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" >
<TextBlock Height="20" HorizontalAlignment="Left" Text="{Binding Name}" FontWeight="Bold" FontSize="13" Foreground="Black" />
<TextBlock Height="20" HorizontalAlignment="Left" Text="{Binding Message}" FontSize="11" Foreground="Gray" />
<Image Source="{Binding NotifImg}" Margin="8,0,0,0"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
以及背后的代码:
private void ContactList_MouseRightButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
e.Handled = true;
}
private void ContactList_MouseRightButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
VisualTreeHelper.FindElementsInHostCoordinates(e.GetPosition(null), (sender as ListBox)).OfType<ListBoxItem>().First().IsSelected = true;
}
不要忘记在'OfType'中包含System.Linq
Ephismen.多重选择模式解决方案
以上Ephismen的解决方案对于多选择模式下的列表框不起作用,例如,当按下Ctrl键时,它不会切换项目的选定状态,当按下Ctrl键时,它不会取消选择其他项目
我建议改为使用自定义鼠标右键单击处理程序创建自定义ListBoxItem。在那里,您可以模拟鼠标左键单击,从而获得完全相同的行为:
public class CustomListBoxItem : ListBoxItem
{
protected override void OnMouseRightButtonDown(MouseButtonEventArgs e)
{
OnMouseLeftButtonDown(e);
}
}
您可能还需要为ItemsSource绑定创建一个简单的转换器-用CustomListBoxItem替换默认情况下创建的标准ListBoxItem:
下面是ItemsSource绑定的外观:
<ListBox
...
ItemsSource="{Binding Converter={StaticResource ItemsToCustomListBoxItemsConverter}}"
...>
你看到这个链接了吗?虽然它确实讨论了上下文菜单,但我认为它在某些方面可能有用。是的,我看到了该链接,但它没有提供我需要的信息,因为没有人回答他的问题。我只需创建行为或触发器/操作组合,并将其附加到顶部堆栈面板。是的,但是我如何通过右键单击选择UI元素?Listbox已启用默认的LeftClick事件,但右键单击不是本机事件,因此在触发它时它不会选择任何内容。请将Listbox的SelectedItem属性设置为接收右键单击的项目