I have a RadDiagramToolbox and I populate it in my viewmodel in an ObservableCollection. I have added a transform to one of the shapes already in the FlowChartShapeType of a 90 degree rotation. Now it appears properly in the toolbox however when I drag it into the diagram it keeps the shape but I lose the rotation. I have followed some examples on deserializing and have added what I have in the code behind on the diagram view. Why doesn't it deserialize properly since Transform is part of Geometry.
ViewModel:
this.Items = new ObservableCollection<MyShape>();
var fe_geometry = ShapeFactory.GetShapeGeometry(FlowChartShapeType.ManualOperationShape).Clone();
fe_geometry.Transform = new RotateTransform(90);
Items .Shapes.Add(new MyShape
{
Name = $"FE{i}",
Geometry = fe_geometry,
});
}
----------------------------
relevant xaml
View:
<telerik:RadDiagramToolbox x:Name="toolbox"
Title="Modules"
Header="{Binding SelectedItem.Header, RelativeSource={RelativeSource Self}}"
ItemsSource="{Binding Items}"
ItemTemplate="{StaticResource ToolboxGroupTemplate}"
Visibility="{Binding IsChecked, Converter={StaticResource BooleanToVisibilityConverter}, ElementName=toolboxButton}" />
<telerik:RadDiagram Grid.Row="1" x:Name="diagram" ConnectionBridge="Bow"
RouteConnections="True" IsRotationEnabled="False"
ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
IsEditable="False"
IsResizingEnabled="False" ShapeDeserialized="diagram_ShapeDeserialized" ShapeDoubleClicked="diagram_ShapeDoubleClicked" >
code behind:
public MainWindow()
{
InitializeComponent();
//this is when you drag it creates the right shape
//http://docs.telerik.com/devtools/wpf/controls/raddiagram/howto/drag-custom-toolboxitem
SerializationService.Default.ItemSerializing += Default_ItemSerializing;
}
private void Default_ItemSerializing(object sender, SerializationEventArgs<IDiagramItem> e)
{
if (e.Entity is RadDiagramShape)
{
e.SerializationInfo["Geometry"] = (e.Entity as RadDiagramShape).Geometry.ToString(CultureInfo.InvariantCulture);
XmlSerializer serializer = new XmlSerializer(typeof(IModule));
using (var writer = new StringWriter())
{
serializer.Serialize(writer, ((e.Entity as RadDiagramShape).DataContext as MyShape).Module);
e.SerializationInfo["DataContent2"] = writer.ToString();
}
}
}
private void diagram_ShapeDeserialized(object sender, Telerik.Windows.Controls.Diagrams.ShapeSerializationRoutedEventArgs e)
{
if (e.Shape as RadDiagramShape != null)
{
(e.Shape as RadDiagramShape).Geometry = GeometryParser.GetGeometry(e.SerializationInfo["Geometry"].ToString()).Clone();
var test = e.SerializationInfo["DataContent2"].ToString();
XmlSerializer serializer = new XmlSerializer(typeof(IModule));
using (var reader = new StringReader(test))
{
(e.Shape as RadDiagramShape).DataContext = serializer.Deserialize(reader);
}
}
}
Thanks,
Amiel