To reproduce: add a RadDiagram and use the following code snippet:
this.radDiagram1.PanToPosition(new Telerik.Windows.Diagrams.Core.Point(10,10));
Workaround: subscribe to the Pan event:
this.radDiagram1.Pan += radDiagram1_Pan;
void radDiagram1_Pan(object sender, Telerik.WinControls.UI.Diagrams.PositionChangedRoutedEventArgs e)
{
}
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();
}