wpf - 单击某些空白区域时,如何取消选择WPF TreeView 中的所有选定项目?

标签 wpf

WPF有一个相当有趣的问题。我有一个树状视图,到目前为止选择项目还不错。问题是,当用户在树视图的空白区域内单击时,我想取消选择当前选定的项目。默认情况下,treeview保持当前项目处于选中状态,并且我添加了一个上下文菜单选项以取消选择它,这是相当困难的:

// 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">

最佳答案

我发现这对我来说更好。我检查原始资源,对于我来说,如果它来自一个treeviewitem,它将是图像还是文本块。我还使用了带有HierarchicalDataTemplate的视图对象,BasicTreeViewBase是我所有不同对象的基类。这是代码。

private void TemplateTreeView_MouseDown(object sender, MouseButtonEventArgs e)
    {
        if (e.ChangedButton == MouseButton.Right && !(e.OriginalSource is Image) && !(e.OriginalSource is TextBlock))
        {
            BasicTreeViewBase item = TemplateTreeView.SelectedItem as BasicTreeViewBase;
            if (item != null)
            {
                TemplateTreeView.Focus();
                item.IsSelected = false;
            }
        }
    }

关于wpf - 单击某些空白区域时,如何取消选择WPF TreeView 中的所有选定项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/491111/

相关文章:

c# - WPF:设计器未能添加第三方控件。这导致设计器重新启动

c# - 如何在代码隐藏中设置 DataGrid 行的背景颜色?

c# - 路由事件的TargetType

wpf - CaSTLe Windsor 代理、隐式接口(interface)和 WPF 绑定(bind)

c# - 带有数据网格和数据表单的可查询 CollectionView - 选择已更改的问题

c# - wpf c# 获取打印机的可用纸张尺寸名称 - 就像 WinForm 中的 PrinterSettings.PaperSize.PaperName

c++ - Windows 通用应用程序 (XAML) : textBlock->Text cannot be called with the given argument list

c# - WPF 图像控件内存泄漏

WPF和3D创建碗效果

c# - 自定义 ComboBox 样式看不到所选项目文本