I have some custom classes.
- ScenarioLink : DiagramLink
- ScenarioNode : TemplatedNode
- ScenarioDiagram : Diagram
- ScenarioDiagramBehavior : DrawLinksBehavior
And, ScenarioLink have ArrowHeads.Triangle for HeadShape
this is defined of ScenarioLink class
public class ScenarioLink : DiagramLink
{
public ScenarioLinkId LinkId { get; set; }
public ScenarioLink(Diagram parent)
: base(parent)
{
InitLink();
}
public ScenarioLink(Diagram parent, DiagramNode origin, DiagramNode dest)
: base(parent, origin, dest)
{
InitLink();
}
private void InitLink()
{
}
public override DiagramItem Clone(bool clipboard)
{
var link = new ScenarioLink(this.Parent, this.Origin, this.Destination)
{ Text = this.Text, SegmentCount = 3, AutoRoute = true, HeadShape = ArrowHeads.Triangle };
return link;
}
protected override void SaveToXml(System.Xml.XmlElement xmlElement, XmlPersistContext context)
{
base.SaveToXml(xmlElement, context);
context.WriteString(LinkId.Value, "LinkId", xmlElement);
}
protected override void LoadFromXml(System.Xml.XmlElement xmlElement, XmlPersistContext context)
{
base.LoadFromXml(xmlElement, context);
LinkId = new ScenarioLinkId(new Guid(context.ReadString("LinkId", xmlElement)));
}
protected override void OnAdd()
{
base.OnAdd();
LinkId = new ScenarioLinkId();
}
}
and this is properties for diagram
<vm:ScenarioDiagram x:Name="diagram" AlignToGrid="true" BorderThickness="5" AllowLinksRepeat="True"
BorderBrush="Black" ShapeBrush="LightBlue" BackBrush="#FFDCDCFF" ShowGrid="true" AllowInplaceEdit="true"
SnapToAnchor="OnCreate" Behavior="Custom" LinkCascadeOrientation="Horizontal" LinkHeadShape="Triangle"
DynamicLinks="True" CrossingRadius="90"
LinkCrossings="Straight" RouteLinks="True" LinkRouter="GridRouter" Bounds="0,0,1000,500"
AllowDrop="True" />
When I loaded custom diagram after using my custom classes, scenariolink hasn't any headshape.
so, I captured SaveToXml and LoadFromXml methods using debug mode.
And, I found that HeadShape property assigned null after base.LoadFromXml inside my override method, LoadFromXml, is executed.
But previous value was "Triangle", before base.LoadFromXml~ method's execution.
Below is my code..
protected override void LoadFromXml(System.Xml.XmlElement xmlElement, XmlPersistContext context)
{
base.LoadFromXml(xmlElement, context);
LinkId = new ScenarioLinkId(new Guid(context.ReadString("LinkId", xmlElement)));
}
How can I solve this problem?????