Browse Source

Bugfix #649

pull/650/head
jkuehner 11 years ago
parent
commit
2863ccc6a2
  1. 3
      samples/XamlDesigner/Document.cs
  2. 15
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/MarkupExtensionPrinter.cs
  3. 1
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/WpfDesign.XamlDom.csproj
  4. 156
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlXmlWriter.cs

3
samples/XamlDesigner/Document.cs

@ -11,6 +11,7 @@ using System.Xml; @@ -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 @@ -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());
}

15
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/MarkupExtensionPrinter.cs

@ -60,7 +60,7 @@ namespace ICSharpCode.WpfDesign.XamlDom @@ -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 @@ -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 @@ -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 @@ -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 @@ -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('\'');

1
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/WpfDesign.XamlDom.csproj

@ -94,5 +94,6 @@ @@ -94,5 +94,6 @@
<Compile Include="XamlTextValue.cs" />
<Compile Include="XamlTypeFinder.cs" />
<Compile Include="XamlTypeResolverProvider.cs" />
<Compile Include="XamlXmlWriter.cs" />
</ItemGroup>
</Project>

156
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlXmlWriter.cs

@ -0,0 +1,156 @@ @@ -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
{
/// <summary>
/// Description of XamlXmlWriter.
/// </summary>
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("&","&amp;").Replace("\"","&quot;"));
}
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
}
}
Loading…
Cancel
Save