Workaround: private void radTreeView1_NodeFormatting(object sender, TreeNodeFormattingEventArgs e) { e.NodeElement.ContentElement.TextAlignment = ContentAlignment.MiddleCenter; }
Say you have a button which clears the old nodes and adds a number of new child nodes to the currently selected node. If the selected node is collapsed, the newly added nodes are not visible but the scrollbar updates as if they were. Workaround the issue by using the BeginUpdate/EndUpdate methods of RadTreeView when updating the nodes: radTreeView1.BeginUpdate(); node.Nodes.Clear(); foreach (RadTreeNode treeNode in nodes) { node.Nodes.Add((RadTreeNode)treeNode.Clone()); } radTreeView1.EndUpdate();
To reproduce: Use the following code on an empty RadTreeView: this.TreeView.AddNodeByPath("General\\Billing\\February\\Report.txt"); You will see that the Report.txt node will be added to the Root node Workaround: Use the following method: private RadTreeNodeCollection AddNode(string path) { if (path == String.Empty) return this.TreeView.Nodes; string node = Path.GetFileName(path); RadTreeNodeCollection parent = AddNode(Path.GetDirectoryName(path)); if (parent.Contains(node)) return parent[node].Nodes; else return parent.Add(node).Nodes; }
Copy and paste in RadTreeView does not copies all properties of RadTreeNode.
To reproduce: radTreeView1.Filter = "new"; radTreeView1.Nodes.Add("new Node"); for (int i = 0; i < 1000; i++) { radTreeView1.Nodes.Add(new RadTreeNode("test")); } Workaround: radTreeView1.TreeViewElement.Update(RadTreeViewElement.UpdateActions.Reset);
The child nodes are aligned to the root nodes when ShowRootLines property is set to false.
To reproduce: Add a RadTreeView and a Timer(from the Windows.Forms namespace). Set the timer's interval to some short duration and add nodes to tree on its tick event. Scroll the thumb while the timer is ticking. At some point you will notice that the scrollbar's maximum value is not correct. Workaround: Do not add nodes while scrolling: List<string> cachedValues = new List<string>(); System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer() { Interval = 100 }; void radTreeView1_MouseCaptureChanged(object sender, EventArgs e) { timer.Start(); } void timer_Tick(object sender, EventArgs e) { timer.Stop(); if (this.cachedValues.Count > 0 && !radTreeView1.TreeViewElement.Scroller.Scrollbar.ThumbElement.Capture) { foreach (string value in this.cachedValues) { root.Nodes.Add(value); } cachedValues.Clear(); } } private void timerUpdateNodes_Tick(object sender, EventArgs e) { for (int i = 0; i < 10; ++i) { if (random.NextDouble() < .2) { if (radTreeView1.TreeViewElement.Scroller.Scrollbar.ThumbElement.Capture) { cachedValues.Add("Node"); } else { root.Nodes.Add("Node"); } } } }
Workaround: raise a flag before the delete operation and cancel the SelectedIndexChanging event
Please refer to the attached gif file and sample project. The screen tip position is not the same each time. Hence, the issue may not be reproducible every time. Workaround: use the TooltiptextNeeded event.
To reproduce: add a RadTreeView and a RadBreadCrumb and apply the MaterialTeal theme. Refer to the attached screenshot illustrating the wrong font of the selected item. Workaround: public partial class RadForm1 : Telerik.WinControls.UI.RadForm { public RadForm1() { InitializeComponent(); ThemeResolutionService.ApplicationThemeName = "MaterialTeal"; this.radTreeView1.NodeFormatting += radTreeView1_NodeFormatting; this.radTreeView1.SelectedNodeChanged += radTreeView1_SelectedNodeChanged; } private void UpdateFont() { foreach (RadSplitButtonElement item in this.radBreadCrumb1.BreadCrumbElement.Items) { foreach (RadMenuItem menuItem in item.Items) { if (this.radTreeView1.SelectedNode != null && menuItem.Text == this.radTreeView1.SelectedNode.Text) { menuItem.Font = new Font(f.FontFamily,f.Size, FontStyle.Bold); } } } } private void radTreeView1_SelectedNodeChanged(object sender, Telerik.WinControls.UI.RadTreeViewEventArgs e) { UpdateFont(); } Font f = null; private void radTreeView1_NodeFormatting(object sender, Telerik.WinControls.UI.TreeNodeFormattingEventArgs e) { f = e.NodeElement.ContentElement.Font; }
Steps to reproduce the issue:
1. Run the example app.
2. Click undo (the last item is removed).
3. Click redo (the last item should be added to the Treeview, it does not)
If I run the application and click undo twice and then redo twice, the things work. The Treeview is not updated if I add and remove the same element instance to the binding list.
Workaround: rebind the treeview after redo or create a new instance of the Element class with the same name and id.
Repro-steps:
Observed behavior:
Expected behavior:
In Load-On-Demand scenario when visibility of ExpanderElement is changed in NodeFormatting - drawing of lines is invalid
The Enabled property cannot be set in PropertyBuild if the RadTreeView is already data-binded via Property builder Workaround: Set the property at run-time.
To reproduce: Add nodes to RadTreeView with at least 3 levels hierarchy. Set some of the last level nodes Visible property to false. Start the application. Expand some nodes and scroll. You will notice that the last item will change sometimes. Workaround: Set this.radTreeView1.TreeViewElement.AllowArbitraryItemHeight = true; Use ItemHeight = 1, instead of Visible = false
To reproduce: Add some notes to RadTreeView. Set the Font as follows in the NodeFormatting event: Font font = new Font("Tahoma", 13f); void tree_NodeFormatting(object sender, TreeNodeFormattingEventArgs e) { e.NodeElement.ContentElement.Font = font; } Start the project on Windows 7 or Vista with ClearType off and you will see that the font is thick. Workaround: Use the following node element: public class MyTreeNodeElement : TreeNodeElement { protected override TreeNodeContentElement CreateContentElement() { return new MyTreeNodeContentElement(); } protected override Type ThemeEffectiveType { get { return typeof(TreeNodeElement); } } } public class MyTreeNodeContentElement : TreeNodeContentElement { protected override void PrePaintElement(Telerik.WinControls.Paint.IGraphics graphics) { base.PrePaintElement(graphics); Graphics g = graphics.UnderlayGraphics as Graphics; if (g == null) { return; } if (this.Enabled) { g.TextRenderingHint = this.TextRenderingHint; } else { g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit; } } } void tree_CreateNodeElement(object sender, CreateTreeNodeElementEventArgs e) { e.NodeElement = new MyTreeNodeElement(); } And set the TextRenderingHint of the ContentElement: Font font = new Font("Tahoma", 13f); void tree_NodeFormatting(object sender, TreeNodeFormattingEventArgs e) { e.NodeElement.ContentElement.Font = font; e.NodeElement.ContentElement.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit; }
Select Demo application >> "Tree View" -> "Drag & Drop". Focus on the left treeview. 1. Click on the node "Drafts"; 2. Press Shift button and click on the "Outbox" node; 3. Release shift button; 4. Press left mouse button on the "Outbox" node and start dragging; 5. Drop selected nodes after node "Large Mail". You can see that order of nodes was changed. Before: "Drafts", "Inbox" and "Outbox" After: "Outbox", "Drafts" and "Inbox" Possible workaround: http://www.telerik.com/forums/nodes-order-after-drag-drop#5bbz6cBDEUeHLyLU5zkfDQ
Workaround: private void radTreeView1_NodeFormatting(object sender, Telerik.WinControls.UI.TreeNodeFormattingEventArgs e) { e.NodeElement.UseDefaultDisabledPaint = true; }
To reproduce: 1. Add a RadTreeView with several nodes 2. Subscribe to the EditorRequired event and specify the editor to TreeViewTextBoxEditor where its Multiline property is set to true. 3. Select a node and press F2. The editor is activated. However, when you enter some text and press Ctrl+Enter, the editor is closed. The expected behavior is that a new line is inserted. Workaround: private void radTreeView1_EditorRequired(object sender, TreeNodeEditorRequiredEventArgs e) { CustomTreeViewTextBoxEditor editor = new CustomTreeViewTextBoxEditor(); editor.Multiline = true; e.Editor = editor; } public class CustomTreeViewTextBoxEditor : TreeViewTextBoxEditor { protected override void OnKeyDown(KeyEventArgs e) { if (e.KeyCode == Keys.Enter && e.Modifiers == Keys.Control && this.Multiline) { return; } base.OnKeyDown(e); } }
To reproduce: Bind the tree to the following structure: public class DeskSites { public string DeskSiteName { get; set; } public Channels channels { get; set; } } public class Channels : List<Channel> { } public class Channel { public string ChannelName { get; set; } public FileSets fileSets { get; set; } } public class FileSets : List<FileSet> { } public class FileSet { public string FileSetName { get; set; } } Workaround: Use the the generic class instead of the inherited one: public class DeskSites { public string DeskSiteName { get; set; } public List<Channel> channels { get; set; } }