To reproduce: - Add DiagramRibbonBar to a user control. - Try setting the AssociatedControl from the smart tag. - An error message will be shown. Workaround: Set it in code: radDiagramRibbonBar1.AssociatedDiagram = radDiagram1;
How to reproduce: check the attached video - unexpected-behavior.gif
To reproduce: Bind using a binding source: DataSet ds = new DataSet(); ds.Tables.Add(shapesTable); ds.Tables.Add(connectionsTable); BindingSource bindingSource1 = new BindingSource { DataSource = ds }; radDiagram1.DiagramElement.DataLayer.DataSource = bindingSource1; Workaround: Bind directly: DataSet ds = new DataSet(); ds.Tables.Add(shapesTable); ds.Tables.Add(connectionsTable); radDiagram1.DiagramElement.DataLayer.DataSource = ds;
By using these events the user will be able to easily cancel moving of a shape in certain conditions.
Please refer to the attached sample project. If you drag a new shape or copy/paste an existing one it is not added to the DataSource collection as it is added in RadGanttView for example. Workaround: handle the ItemsChanged event and add a new record to the DataSource manually.
To reproduce - Click between the thumb and the button. Workaround: public class MyDiagramInputBehavior : DiagramInputBehavior { public MyDiagramInputBehavior(RadDiagramElement element) : base(element) { } protected override bool IsScrollBar(RadElement element) { if (element != null && element is RadScrollBarElement) { return true; } return base.IsScrollBar(element); } }
http://docs.telerik.com/devtools/wpf/controls/raddiagram/extensions/thumbnail
To reproduce: - Add some connections and zoom. - Click a connection - The event is not fired. Workaround: Friend Class MyInputBehaviour Inherits DiagramInputBehavior Public Sub New(ByVal element As RadDiagramElement) MyBase.New(element) End Sub Public Overrides Function HandleMouseUp(ByVal e As MouseEventArgs) As Boolean ' return base.HandleMouseUp(e); If Me.DiagramElement.ElementTree.Control.Site IsNot Nothing Then Return False End If Dim elementUnderMouse As RadElement = Me.DiagramElement.ElementTree.GetElementAtPoint(e.Location) If Me.IsScrollBar(elementUnderMouse) Then Return False End If If TypeOf elementUnderMouse Is RadButtonElement Then Return False End If Dim position = e.Location Dim transform As Telerik.WinControls.Layouts.RadMatrix = Me.DiagramElement.MainPanel.TotalTransform transform.Invert() Dim transformedPosition = transform.TransformPoint(position) Dim service = Me.DiagramElement.Controller.ServiceLocator.GetService(Of IHitTestService)() Dim conectionUnderPoint = TryCast(service.GetItemsNearPoint(transformedPosition, DiagramConstants.SelectionHitTestRadius).Where(Function(i) TypeOf i Is IConnection).OrderByDescending(Function(x) x.ZIndex).FirstOrDefault(), IConnection) If conectionUnderPoint IsNot Nothing Then DirectCast(Me.DiagramElement, IGraphInternal).PublishDiagramEvent(DiagramEvent.ConnectionClicked, New GenericEventArgs(Of IConnection)(conectionUnderPoint, e)) End If Dim mi = Me.DiagramElement.GetType().GetMethod("UpdateFocusedElement", System.Reflection.BindingFlags.Instance Or System.Reflection.BindingFlags.NonPublic) mi.Invoke(Me.DiagramElement, Nothing) Return False End Function End Class Change like this: RadDiagram1.DiagramElement.InputBehavior = New MyInputBehaviour(RadDiagram1.DiagramElement)
To reproduce: - Add some shapes and zoom so only one is visible. - Export to image. - The image size is not correct. Workaround: private const int InflateValue = 7; public System.Drawing.Image ExportToImage() { RadDiagramElement diagram = radDiagram1.DiagramElement; var enclosingBounds = diagram.CalculateEnclosingBounds(); using (Bitmap image = new Bitmap((int)(Math.Abs(enclosingBounds.Right) + InflateValue + Math.Abs( enclosingBounds.Left)), (int)(Math.Abs(enclosingBounds.Bottom) + InflateValue + Math.Abs(enclosingBounds.Top)))) { System.Drawing.Graphics nativeGraphics = System.Drawing.Graphics.FromImage(image); nativeGraphics.FillRectangle(new System.Drawing.SolidBrush(diagram.ElementTree.RootElement.BackColor), 0, 0, image.Width, image.Height); Telerik.WinControls.Paint.RadGdiGraphics radGdi = new Telerik.WinControls.Paint.RadGdiGraphics(nativeGraphics); foreach (RadElement element in diagram.ItemsHost.GetChildren(ChildrenListOptions.ZOrdered)) { element.Paint(radGdi, new System.Drawing.Rectangle(int.MinValue / 2, int.MinValue / 2, int.MaxValue, int.MaxValue), 0f, new System.Drawing.SizeF(1, 1), true); } System.Drawing.Image img = (System.Drawing.Image)image.Clone(); nativeGraphics.Dispose(); radGdi.Dispose(); return img; } }
How to reproduce: public partial class Form1 : Form { public Form1() { InitializeComponent(); RadDiagramShape shape1 = new RadDiagramShape() { Text = "Second Level Domain", ElementShape = new RoundRectShape(4), BackColor = Color.LimeGreen }; shape1.Position = new Telerik.Windows.Diagrams.Core.Point(100, 100); radDiagram1.Items.Add(shape1); var res = radDiagram1.Items[0]; ((Telerik.WinControls.UI.Diagrams.RadDiagramItem)shape1).EndEdit += item_EndEdit; RadDiagramShape shape2 = new RadDiagramShape() { Text = "Top Level Domain", ElementShape = new RoundRectShape(50), BackColor = Color.Cyan }; shape2.Position = new Telerik.Windows.Diagrams.Core.Point(1600, 100); radDiagram1.Items.Add(shape2); RadDiagramShape shape3 = new RadDiagramShape() { Text = "Organization Domain", ElementShape = new RoundRectShape(20), BackColor = Color.Yellow }; shape3.Position = new Telerik.Windows.Diagrams.Core.Point(2400, 100); radDiagram1.Items.Add(shape3); RadDiagramConnection connection1 = new RadDiagramConnection() { Name = "connection1" }; connection1.Source = shape1; connection1.Target = shape2; radDiagram1.Items.Add(connection1); RadDiagramConnection connection2 = new RadDiagramConnection() { Name = "connection2" }; connection2.Source = shape2; connection2.Target = shape3; radDiagram1.Items.Add(connection2); } private void item_EndEdit(object sender, Telerik.WinControls.UI.Diagrams.RadRoutedEditEventArgs e) { RadDiagramShape shape = ((RadDiagramShape)sender); string txt = shape.Text; Size size = TextRenderer.MeasureText(txt, shape.Font, new System.Drawing.Size( (int)shape.Width, int.MaxValue ), ~TextFormatFlags.SingleLine); shape.Height = size.Height; } private void radButton1_Click(object sender, EventArgs e) { this.radDiagram1.DiagramElement.BringIntoView(radDiagram1.Items[0], this.radDiagram1.Zoom, false); } private void radButton2_Click(object sender, EventArgs e) { this.radDiagram1.DiagramElement.BringIntoView(radDiagram1.Items[1], this.radDiagram1.Zoom, false); } private void radButton3_Click(object sender, EventArgs e) { this.radDiagram1.DiagramElement.BringIntoView(radDiagram1.Items[2], this.radDiagram1.Zoom, false); } } Workaround: manually update the view private void radButton1_Click(object sender, EventArgs e) { this.radDiagram1.DiagramElement.BringIntoView(radDiagram1.Items[0], this.radDiagram1.Zoom, false); this.radDiagram1.DiagramElement.Controller.OnViewportChanged(); } private void radButton2_Click(object sender, EventArgs e) { this.radDiagram1.DiagramElement.BringIntoView(radDiagram1.Items[1], this.radDiagram1.Zoom, false); this.radDiagram1.DiagramElement.Controller.OnViewportChanged(); } private void radButton3_Click(object sender, EventArgs e) { this.radDiagram1.DiagramElement.BringIntoView(radDiagram1.Items[2], this.radDiagram1.Zoom, false); this.radDiagram1.DiagramElement.Controller.OnViewportChanged(); }
The user is not allowed to add a shape or edit an existing one by using the TextTool: http://docs.telerik.com/devtools/winforms/diagram/diagram-tools/text-tool Workaround: Me.RadDiagramRibbonBar1.buttonTextTool.Visibility = Telerik.WinControls.ElementVisibility.Collapsed
To reproduce: - Add shape and zoom the view. - Call the method: radDiagram1.DiagramElement.BringIntoView(radDiagram1.Shapes[0]); Workaround: radDiagram1.DiagramElement.BringIntoView(radDiagram1.Shapes[0],radDiagram1.Zoom, false);