diff --git a/samples/XamlDesigner/Document.cs b/samples/XamlDesigner/Document.cs index 1079edf0a4..705c1046de 100644 --- a/samples/XamlDesigner/Document.cs +++ b/samples/XamlDesigner/Document.cs @@ -11,6 +11,7 @@ using System.Xml; using ICSharpCode.WpfDesign; using ICSharpCode.WpfDesign.Designer.Services; using System.Diagnostics; +using ICSharpCode.WpfDesign.XamlDom; namespace ICSharpCode.XamlDesigner { @@ -196,7 +197,7 @@ namespace ICSharpCode.XamlDesigner void UpdateXaml() { var sb = new StringBuilder(); - using (var xmlWriter = XmlWriter.Create(sb)) { + using (var xmlWriter = new XamlXmlWriter(sb)) { DesignSurface.SaveDesigner(xmlWriter); Text = XamlFormatter.Format(sb.ToString()); } diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/LineExtensionBase.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/LineExtensionBase.cs index 6a9c6242c4..eef5e6a063 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/LineExtensionBase.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/LineExtensionBase.cs @@ -73,7 +73,7 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions public LineExtensionBase() { _surface = new Canvas(); - adornerPanel = new AdornerPanel(); + adornerPanel = new AdornerPanel(){ MinWidth = 10, MinHeight = 10 }; adornerPanel.Order = AdornerOrder.Foreground; adornerPanel.Children.Add(_surface); Adorners.Add(adornerPanel); @@ -142,7 +142,7 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions } AdornerPanel ap = _surface.Parent as AdornerPanel; - + _surface.Width = ap.Width; _surface.Height = ap.Height; diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/PathHandlerExtension.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/PathHandlerExtension.cs index 042d329b86..7cdabd4f73 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/PathHandlerExtension.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/PathHandlerExtension.cs @@ -580,7 +580,7 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions saveDesignItem = () => { dd.Properties["StartPoint"].SetValue(((PathFigure)dd.Component).StartPoint); - dd.Properties["Segments"].SetValue(((PathFigure)dd.Component).Segments); + //dd.Properties["Segments"].SetValue(((PathFigure)dd.Component).Segments); }; list.Add(new PathPoint(figure.StartPoint, figure, null, (p) => figure.StartPoint = p, saveDesignItem, shape)); foreach (var s in figure.Segments) { diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/Editors/NumberEditor.xaml.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/Editors/NumberEditor.xaml.cs index 7ef21b23fa..88129aee9d 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/Editors/NumberEditor.xaml.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/Editors/NumberEditor.xaml.cs @@ -117,16 +117,20 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid.Editors Maximum = range.Max; } - if (Minimum == 0 && Maximum == 1) { + if (type == typeof(double) || type == typeof(decimal)) { DecimalPlaces = 2; - SmallChange = 0.01; - LargeChange = 0.1; - } - else { - ClearValue(DecimalPlacesProperty); - ClearValue(SmallChangeProperty); - ClearValue(LargeChangeProperty); } + +// if (Minimum == 0 && Maximum == 1) { +// DecimalPlaces = 2; +// SmallChange = 0.01; +// LargeChange = 0.1; +// } +// else { +// ClearValue(DecimalPlacesProperty); +// ClearValue(SmallChangeProperty); +// ClearValue(LargeChangeProperty); +// } } public override void OnApplyTemplate() @@ -147,30 +151,30 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid.Editors double val; if(double.TryParse(textBox.Text, out val)){ if(PropertyNode.FirstProperty.TypeConverter.IsValid(textBox.Text)){ - if(val >= Minimum && val <= Maximum || double.IsNaN(val)){ - textBox.Foreground=Brushes.Black; - textBox.ToolTip=textBox.Text; - }else{ - textBox.Foreground = Brushes.DarkBlue; - textBox.ToolTip = "Value should be in between "+Minimum+" and "+Maximum; - } - }else{ - textBox.Foreground = Brushes.DarkRed; - textBox.ToolTip = "Cannot convert to Type : " + PropertyNode.FirstProperty.ReturnType.Name; - } - }else{ - textBox.Foreground = Brushes.DarkRed; - textBox.ToolTip = string.IsNullOrWhiteSpace(textBox.Text)? null:"Value does not belong to any numeric type"; - } - + if(val >= Minimum && val <= Maximum || double.IsNaN(val)){ + textBox.Foreground=Brushes.Black; + textBox.ToolTip=textBox.Text; + }else{ + textBox.Foreground = Brushes.DarkBlue; + textBox.ToolTip = "Value should be in between "+Minimum+" and "+Maximum; + } + }else{ + textBox.Foreground = Brushes.DarkRed; + textBox.ToolTip = "Cannot convert to Type : " + PropertyNode.FirstProperty.ReturnType.Name; + } + }else{ + textBox.Foreground = Brushes.DarkRed; + textBox.ToolTip = string.IsNullOrWhiteSpace(textBox.Text)? null:"Value does not belong to any numeric type"; + } + } ChangeGroup group; protected override void OnDragStarted() { - group = PropertyNode.Context.OpenGroup("drag number", - PropertyNode.Properties.Select(p => p.DesignItem).ToArray()); + group = PropertyNode.Context.OpenGroup("drag number", + PropertyNode.Properties.Select(p => p.DesignItem).ToArray()); } protected override void OnDragCompleted() diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/MarkupExtensionPrinter.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/MarkupExtensionPrinter.cs index aaea8be6e7..617a07df0f 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/MarkupExtensionPrinter.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/MarkupExtensionPrinter.cs @@ -60,7 +60,7 @@ namespace ICSharpCode.WpfDesign.XamlDom var p=obj.Properties.FirstOrDefault(x=>x.PropertyName=="Path"); if (p!=null && p.IsSet) { sb.Append(" "); - AppendPropertyValue(sb, p.PropertyValue); + AppendPropertyValue(sb, p.PropertyValue, false); properties.Remove(p); first = false; } @@ -69,7 +69,7 @@ namespace ICSharpCode.WpfDesign.XamlDom var p=obj.Properties.FirstOrDefault(x=>x.PropertyName=="Name"); if (p!=null && p.IsSet) { sb.Append(" "); - AppendPropertyValue(sb, p.PropertyValue); + AppendPropertyValue(sb, p.PropertyValue, false); properties.Remove(p); first = false; } @@ -78,7 +78,7 @@ namespace ICSharpCode.WpfDesign.XamlDom var p=obj.Properties.FirstOrDefault(x=>x.PropertyName=="ResourceKey"); if (p!=null && p.IsSet) { sb.Append(" "); - AppendPropertyValue(sb, p.PropertyValue); + AppendPropertyValue(sb, p.PropertyValue, false); properties.Remove(p); first = false; } @@ -96,13 +96,13 @@ namespace ICSharpCode.WpfDesign.XamlDom sb.Append(property.GetNameForMarkupExtension()); sb.Append("="); - AppendPropertyValue(sb, property.PropertyValue); + AppendPropertyValue(sb, property.PropertyValue, property.ReturnType == typeof(string)); } sb.Append("}"); return sb.ToString(); } - private static void AppendPropertyValue(StringBuilder sb, XamlPropertyValue value) + private static void AppendPropertyValue(StringBuilder sb, XamlPropertyValue value, bool isStringProperty) { var textValue = value as XamlTextValue; if (textValue != null) { @@ -113,7 +113,10 @@ namespace ICSharpCode.WpfDesign.XamlDom sb.Append('\''); } - sb.Append(text.Replace("\\", "\\\\")); + if (isStringProperty) + sb.Append(text.Replace("\\", "\\\\").Replace("{", "\\{").Replace("}", "\\}")); + else + sb.Append(text.Replace("\\", "\\\\")); if(containsSpace) { sb.Append('\''); diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/WpfDesign.XamlDom.csproj b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/WpfDesign.XamlDom.csproj index 36e1b5c8e9..52c406c145 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/WpfDesign.XamlDom.csproj +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/WpfDesign.XamlDom.csproj @@ -94,5 +94,6 @@ + \ No newline at end of file diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlXmlWriter.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlXmlWriter.cs new file mode 100644 index 0000000000..c85dc81dc3 --- /dev/null +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlXmlWriter.cs @@ -0,0 +1,156 @@ +/* + * Created by SharpDevelop. + * User: jkuehner + * Date: 30.01.2015 + * Time: 09:56 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.Xml; + +namespace ICSharpCode.WpfDesign.XamlDom +{ + /// + /// Description of XamlXmlWriter. + /// + public class XamlXmlWriter : XmlWriter + { + protected XmlWriter xmlWriter; + + public XamlXmlWriter(System.Text.StringBuilder stringBuilder) + { + this.xmlWriter = XmlWriter.Create(stringBuilder); + } + + #region implemented abstract members of XmlWriter + + public override void WriteStartDocument() + { + xmlWriter.WriteStartDocument(); + } + + public override void WriteStartDocument(bool standalone) + { + xmlWriter.WriteStartDocument(standalone); + } + + public override void WriteEndDocument() + { + xmlWriter.WriteEndDocument(); + } + + public override void WriteDocType(string name, string pubid, string sysid, string subset) + { + xmlWriter.WriteDocType(name, pubid, sysid, subset); + } + + public override void WriteStartElement(string prefix, string localName, string ns) + { + xmlWriter.WriteStartElement(prefix, localName, ns); + } + + public override void WriteEndElement() + { + xmlWriter.WriteEndElement(); + } + + public override void WriteFullEndElement() + { + xmlWriter.WriteFullEndElement(); + } + + public override void WriteStartAttribute(string prefix, string localName, string ns) + { + xmlWriter.WriteStartAttribute(prefix, localName, ns); + } + + public override void WriteEndAttribute() + { + xmlWriter.WriteEndAttribute(); + } + + public override void WriteCData(string text) + { + xmlWriter.WriteCData(text); + } + + public override void WriteComment(string text) + { + xmlWriter.WriteComment(text); + } + + public override void WriteProcessingInstruction(string name, string text) + { + xmlWriter.WriteProcessingInstruction(name, text); + } + + public override void WriteEntityRef(string name) + { + xmlWriter.WriteEntityRef(name); + } + + public override void WriteCharEntity(char ch) + { + xmlWriter.WriteCharEntity(ch); + } + + public override void WriteWhitespace(string ws) + { + xmlWriter.WriteWhitespace(ws); + } + + public override void WriteString(string text) + { + xmlWriter.WriteString(text.Replace("&","&").Replace("\"",""")); + } + + public override void WriteSurrogateCharEntity(char lowChar, char highChar) + { + xmlWriter.WriteSurrogateCharEntity(lowChar, highChar); + } + + public override void WriteChars(char[] buffer, int index, int count) + { + xmlWriter.WriteChars(buffer, index, count); + } + + public override void WriteRaw(char[] buffer, int index, int count) + { + xmlWriter.WriteRaw(buffer, index, count); + } + + public override void WriteRaw(string data) + { + xmlWriter.WriteRaw(data); + } + + public override void WriteBase64(byte[] buffer, int index, int count) + { + xmlWriter.WriteBase64(buffer, index, count); + } + + public override void Close() + { + xmlWriter.Close(); + } + + public override void Flush() + { + xmlWriter.Flush(); + } + + public override string LookupPrefix(string ns) + { + return xmlWriter.LookupPrefix(ns); + } + + public override WriteState WriteState { + get { + return xmlWriter.WriteState; + } + } + + #endregion + } +}