我在WPF上遇到了一个相当有趣的问题。我有一个树形视图,选择项目目前运作得很好。问题是,当用户点击树形视图空白区域时,我希望取消当前已选择的项目。默认情况下,树形视图会保持当前项目被选中,我添加了一个上下文菜单选项来取消选择,这相当“强硬”:
// Note: This is done recursivly from the start, so it
// works for child items as well
treeView.ItemContainerGenerator.ContainerFromItem(treeView.SelectedItem) as TreeViewItem).IsSelected = false;
此外,这是违反直觉的,因为它要求用户先右键单击,其次,通过这种方式取消选择后,用户不能再通过单击该项目来选择它。这应该如何工作?
编辑:更多信息:我已经向TreeView
添加了一个处理程序来处理鼠标点击事件,但是发送者始终是TreeView
实例,即使我直接点击TreeViewItem
。 如果我改为在我的TreeView.ItemTemplate
上添加处理程序(即模板中的第一个子项),则当我单击空区域时永远不会收到事件(这是相当合理的)。 代码如下:
private void MyTreeView_MouseUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
if ((sender as TreeViewItem) == null)
{
// Always triggered
System.Diagnostics.Trace.Write("Empty area clicked");
}
}
这个的 XAML 是:
<TreeView x:Name="MyTreeView" Margin="3" MouseUp="MyTreeView_MouseUp">