Tag: treeview

TreeView所有者在选择时绘制毛刺

我正在尝试向标准System.Windows.Forms.TreeView控件的元素添加一些图标。 我的计划只是改变树视图控件的标签区域,但它显示了一个奇怪的行为。 如果单击某个节点将其选中,则在按下鼠标按钮时,将使用突出显示颜色正确绘制背景。 但是,在我释放鼠标按钮之前,文本是错误的未选择颜色。 就像e.State在按下和释放鼠标按钮之间包含错误状态一样。 这是我正在做的事情:我使用this.DrawMode = TreeViewDrawMode.OwnerDrawText初始化,然后使用this.DrawNode += LayoutTreeView_DrawNode注册我的事件处理程序。 这是处理程序: void LayoutTreeView_DrawNode(object sender, DrawTreeNodeEventArgs e) { Color color = (e.State & TreeNodeStates.Selected) != 0 ? SystemColors.HighlightText : SystemColors.WindowText; TextFormatFlags flags = TextFormatFlags.Left | TextFormatFlags.SingleLine | TextFormatFlags.VerticalCenter | TextFormatFlags.EndEllipsis; TextRenderer.DrawText(e.Graphics, e.Node.Text, Font, e.Bounds, color, flags); } 如果我将处理程序设置为默认情况… void LayoutTreeView_DrawNode(object sender, DrawTreeNodeEventArgs e) { e.DefaultDraw = […]

TreeView与列

对于我正在编写的应用程序,我需要一个多柱状Treeview,我想知道是否有人知道免费工作(在Vs-2010中)多列圆形Treeview。

创建自定义TreeView / TreeNode

我需要扩展TreeNode类,以便我可以为每个节点添加自定义属性(看作WebForms TreeNode不包含Tag属性)。 所以这是我的CustomTreeNode: public class CustomTreeNode : TreeNode { public CustomTreeNode() { } public CustomTreeNode(int nodeId, string nodeType) { NodeId = nodeId; NodeType = nodeType; } public string NodeType { get; set; } public int NodeId { get; set; } } 如果我创建一个CustomTreeNode并将其添加到TreeView: CustomTreeNode node = new CustomTreeNode(1, “CustomType”); treeView.Nodes.Add(node); 然后我会得到一个执行以下的转换exception: CustomTreeNode selectedNode = (CustomTreeNode)TreeView.SelectedNode; 因为TreeView返回TreeNode,而不是CustomTreeNode。 […]

是否可以根据Treeview上的选择禁用上下文菜单项

我将为树视图提供某种节点,如下所示 Root | – > some.txt(在运行时添加的文本文件)| – > Child(some.txt的子项)| – > child1(child for child) 我设计了我的上下文菜单,其中包含一些选项,如New和Remove 我需要的是当我点击Root,孩子或孩子时我想禁用删除选项

如何从TreeView中有效删除已检查的项目?

如何轻松遍历TreeView中的所有节点,检查其.Checked属性,然后删除所有已检查的节点? 它似乎很简单,但你不应该修改你正在迭代的集合,从而消除了“foreach”循环的可能性。 (.Nodes.Remove调用正在修改集合。)如果尝试这样做,效果是只有大约一半的.Checked节点被删除。 即使一个人使用两个传递:首先创建一个临时索引列表,然后在第二次传递时通过索引删除 – 每次删除时索引都会改变,从而使索引列表的完整性无效。 那么,最有效的方法是什么? 下面是一个看起来不错的代码示例,但实际上只删除了大约一半的.Checked节点: foreach (TreeNode parent in treeView.Nodes) { if (parent.Checked) { treeView.Nodes.Remove(parent); } else { foreach (TreeNode child in parent.Nodes) { if (child.Checked) parent.Nodes.Remove(child); } } } (是的,目的只是从两层深度的树中修剪节点。)

如何在TreeView中显示目录?

以下是我的代码 DirectoryInfo directoryInfo = new DirectoryInfo(@”C:\Users\Shahul\Documents\Visual Studio 2010\Projects\TreeView\TreeView\bin\FileExplorer”); private void Form1_Load(object sender, EventArgs e) { if (Directory.Exists(“FileExplorer”)) { try { DirectoryInfo[] directories = directoryInfo.GetDirectories(); foreach (FileInfo file in directoryInfo.GetFiles()) { if (file.Exists) { TreeNode nodes = treeView.Nodes[0].Nodes.Add(file.Name); } } if (directories.Length > 0) { foreach (DirectoryInfo directory in directories) { TreeNode node = treeView.Nodes[0].Nodes.Add(directory.Name); node.ImageIndex […]

在WPF C#TreeView中获取子节点的父节点

我知道使用WPF在C#中编程与传统的C#程序不同,因此大多数在线资料都没有说明我需要的内容。 我的WPF窗口中有一个TreeView控件,我有父节点和子节点。 我想将它们存储在Node类型的列表中(id,name,parent)。 我使用以下命令获取所选项目/节点的名称: private void TreeViewItem_OnItemSelected(object sender, RoutedEventArgs e) { TreeViewItem item = treeView.SelectedItem as TreeViewItem; nameTxt.Text = item.Header.ToString(); } 我尝试在使用它之前立即获取子节点的Parent: TreeViewItem item = treeView.SelectedItem as TreeViewItem; nameTxt.Text = item.Parent.ToString(); 但是,这将返回根父(A)而不是子父(即2)。 我应该做些什么来改变孩子的直接父母而不是根父母? 🙂 编辑:这是XAML

尝试在WPF中构建查询生成器控件

请问我这个问题的长度,我试着尽可能地描述。 我是WPF编程的新手。 我基本上是在尝试构建RadDataFilter控件 : RadDataFilter用于通过构建查询表达式来过滤集合。 通常通过从数据库中提取所有数据然后对其进行过滤来使用该控件。 但是,我正在尝试使用它来构建SQL查询表达式,然后我查询数据库以检索数据。 我们公司拥有Telerik产品的许可证,因此我不得不尝试使用该控件。 不幸的是,控件不灵活到我想要自定义Left Dropdown (RadComboBox)的程度。 由于我们有几个用户可以过滤的项目,因此为它们提供单个dropdpwn是不可行的。 我想有一个自定义控件而不是下拉列表。 我有以下解决此问题的方法: 解压缩该控件的模板,并在我的XAML中覆盖它,如此处所述。 但是,尽管如此,我无法改变控制。 我认为这是由于我对WPF的知识不足。 尝试更改Telerik的源代码(我们也有代码许可证)。 但是,通过这种方法,我们需要在每次升级时不断进行更改,这对团队来说是高度维护。 尝试构建自定义控件。 我正在寻找第三种方法。 如果有一种简单的方法(使用前两种方法)或任何其他解决方案来实现这一点,请告诉我,我会尝试。 为了实现第三种方法,我想使用一个TreeView与每个节点使用ControlTemplate(包含我的自定义控件)。 我将覆盖自定义控件的ToString()方法,该方法为我提供了一个查询条件。 完成后,我将遍历根节点的子节点以构建最终的查询表达式。 然而,正如我所注意到的,我们需要2个不同的ControlTemplates(一个允许创建filter表达式,另一个允许使用运算符,类似于RadDataFilter)。 我不知道如何设置这样的多个模板。 对于那里的一些开发人员来说这听起来很简单,但我对C#和WPF编程很陌生,需要时间和经验来适应它。 如果您知道我可以尝试解决此问题的任何其他解决方案,请通知我。 如果您觉得创建自定义控件更好,请引导我了解实现此目的的最佳方法。 还评论我创建自定义控件的方法。 谢谢!

将winform treeview变成wpf treeview

我已经构建了一个在winforms中生成树视图的函数。 它包括带有递归的子文件夹和文件。 现在我想把它翻译成wpf。 我无法弄清楚如何处理这些类。 我知道我必须制作我自己的自定义类’treenode’,它具有类似于winforms treenode的属性’ parent ‘。 但是在wpf中我需要两种不同类型的treenode,所以我可以通过数据类型正确绑定wpf。 我在使用家庭的wpf中有一个工作示例,我只是不确定如何将我的winform版本转换为wpf。 有人可以帮助我让我的winform版本在wpf中运行吗? 然后最终目标是在WPF中使用目录和文件填充我的树视图,如我的winforms示例中所示。 但是,WPF版本的样式应该保持文件和文件夹的“图标”显示。 我希望有人可以帮助我正常工作。 欢迎任何建议和意见。 ViewModel.cs using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.IO; using System.Windows; using System.Windows.Input; using System.Linq; namespace WpfApplication1 { public class ViewModel : ObservableObject { // Properties private ObservableCollection directoryNodes; public ObservableCollection DirectoryNodes { get { return directoryNodes; } set { […]

如何将Xml属性绑定到Treeview节点,同时将XDocument数据绑定到WPF Treeview

我有一个XML需要数据绑定到WPF TreeView 。 这里的XML可以有不同的结构。 TreeView应该是数据绑定通用的,足以加载任何层次结构的排列。 但是,节点上的XAttribute (称为Title )应该数据绑定到TreeViewItem的头文本而不是节点名 。 要绑定的XML: XAML: XAML的代码隐藏,它将XML加载到XDocument并将其绑定到TreeView public partial class TreeViewer : Window { public TreeViewer() { InitializeComponent(); XDocument doc = XDocument.Parse(File.ReadAllText(@”C:\MyWizard.xml”)); _treeView.DataContext = doc; } } 因此,在XAML标记中,我们将Name绑定到TreeViewItem的标头。 但是,我想将它绑定到上面Xml中Section,Loop和Page的Title属性。 我读到在绑定XDocument时不可能使用XPath。 但必须有一种方法将Title属性绑定到TreeViewItem的Header文本。 我尝试使用@Title,。[@ Title]等。但似乎都没有用。 MSDN论坛上的这个主题也有类似的讨论。 任何指针都会非常有用。