【发布时间】:2009-01-29 10:12:53
【问题描述】:
我对 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">
【问题讨论】:
标签: wpf