当前位置: 首页 > 知识库问答 >
问题:

TreeViewItem父节点上折叠的事件激发

马庆
2023-03-14

我有一个定义如下的WPF TreeView控件:

<TreeView x:Name="samplesTree" MouseDoubleClick="samplesTree_MouseDoubleClick"
          KeyUp="samplesTree_KeyUp"
          SelectedItemChanged="samplesTree_SelectedItemChanged"
          IsVisibleChanged="treeView_IsVisibleChanged">
</TreeView>

我使用以下代码跟踪哪些节点已经展开或折叠:

private List<object> SamplesExpandedTags = new List<object>();

private void stag_Collapsed(object sender, RoutedEventArgs e)
{
    object tag = (sender as TreeViewItem).Tag;
    if (SamplesExpandedTags.Contains(tag))
        SamplesExpandedTags.Remove(tag);
}

private void stag_Expanded(object sender, RoutedEventArgs e)
{
    object tag = (sender as TreeViewItem).Tag;
    if (!SamplesExpandedTags.Contains(tag))
        SamplesExpandedTags.Add(tag);
}

...

// Items are created in code behind, not using binding to DataSource 
TreeViewItem item = new TreeViewItem();
item.Header = tv.NazevTypuVyrobku;
item.Tag = string.Format("TV{0}",tv.TypVyrobkuID);
item.Expanded += new RoutedEventHandler(stag_Expanded);
item.Collapsed += new RoutedEventHandler(stag_Collapsed);
if ((sender as TreeViewItem).IsExpanded) return;
e.Handled = true;
subitem.Expanded += new RoutedEventHandler(stag_Expanded);
subitem.Expanded += new RoutedEventHandler(sampleOperation_Expanded);
subitem.Collapsed += new RoutedEventHandler(stag_Collapsed);

与以下代码的工作方式不同:

subitem.Expanded += new RoutedEventHandler(sampleOperation_Expanded);
subitem.Expanded += new RoutedEventHandler(stag_Expanded);
subitem.Collapsed += new RoutedEventHandler(stag_Collapsed);

在第一种情况下,sampleoperation_expanded根本不执行,因为e.handle=true;命令。我认为事件处理程序的执行顺序不应该很重要?

共有1个答案

别永年
2023-03-14

也许可以尝试在stag_collapped()方法中将e.handled设置为true。在MSDN中,“标记已处理的事件将限制事件路由中侦听器对路由事件的可见性”。

private void stag_Collapsed(object sender, RoutedEventArgs e)
{
    object tag = (sender as TreeViewItem).Tag;
    if (SamplesExpandedTags.Contains(tag))
        SamplesExpandedTags.Remove(tag);
    e.Handled = true;
}
 类似资料:
  • 折叠隐藏节点,可记录用户上次行为。 标题 内容 类型 通用 支持布局 responsive, fixed-height, fill, container, fixed 所需脚本 https://c.mipcdn.com/static/v2/mip-accordion/mip-accordion.js 使用说明 mip-accordion 是一个折叠隐藏节点的 MIP 组件,可以对满足特定结构的节点

  • 我正在构建一个Java应用程序。这个应用程序是一个典型的“油漆”应用程序,你可以选择一种颜色,并在画布上绘制。除了...我将有一个圆圈数组分布在画布的顶部。我希望这些圆立即改变颜色,如果,当用户正在绘制和鼠标得到圆的X(10)个像素(其中X是绘制的线的宽度除以2)。 这是我的密码。我有一张画布是一组的一部分。我还创建了一个圆圈节点,并将其作为组的一部分。我想我需要以某种方式创建一个鼠标事件,当用户

  • 在提交对话框的时,我添加的更新,以便查看添加的节点 问题是用户打开的所有展开节点都将崩溃 我发现这个问题避免了更新后p:treeTable的折叠,在他写的问题中解决了这个问题,但他的问题没有答案或解决方案

  • 我想知道如何实现这个功能: 我有一个可编辑的JTree,可以编辑节点的名称。如果我有一个节点是分支节点(其中有一些叶节点),并且该分支节点在编辑时展开,编辑后,该节点将折叠。 编辑完成后,如果分支节点打开,我想让它保持打开状态,如果分支节点折叠,我想让它折叠。 我试图查看TreeWireExpandListener,但它似乎无法解决我的问题,因为在调用这些方法之前,我需要识别实际节点是否处于编辑模

  • 我正在处理树状态(展开/选择的节点)保存,并创建了一个实用程序类,可以保存和恢复节点状态。工作很好。 但JTree本身仍然存在一个问题--当用户使用某个JTree实例(展开/折叠节点)时,可能会出现某个节点(隐藏在另一个折叠节点下)被展开的情况。没什么特别的--那很好。 JTree将有关展开/折叠节点的记录保存在单独的哈希表中,使用节点路径作为键,使用布尔值作为展开状态值。因此,当折叠的父节点下的

  • 我正在使用jsTree显示一个树。我想选择树中可以使用的所有节点。这工作得很好。 但是,这将展开所有节点,并且拥有一个大树将把其余的内容一直往下推。 我想在检查所有节点后折叠树,但使用不起作用。 有人有办法解决吗?