Guten Tag Community.
Ich stehe momentan vor einem Problem. Ich möchte eine handschriftliche Notiz, welche ich in einer Win10 Universal App mittels der InkCanvas eingebe, speichern.
Die Datei aysnchron als Datei zu speichern und zu laden ist nicht das Problem.
Ich habe eine Klasse Cards, die mir die Notiz speichern soll. Und eine Klasse Stack, die mehrere Cards als Liste speichert.
Die Stack-Objekte die jeweils die Cards enthalten werden in einer Liste gespeichert. Nun möchte ich diese Liste Speichern.
Das Problem ist, dass ich keinen Weg finde dieses Objekt zu serialisieren oder in LocalSettings zu speichern.
Ich habe einen Weg gefunden, der über eine JASON Bibliothek führt, dort kommt es aber zu einem Loop bei der Canvas.
"Self referencing loop detected for property 'InkPresenter' with type 'Windows.UI.Input.Inking.InkPresenter'. Path '[0].Cards[0].InkCanvas.InkPresenter.StrokeInput'"
In der Zeile
string val = JsonConvert.SerializeObject(value);
Eine zweite Sache ist:
Wenn ich die InkCanvas bemale diese dann nach einem Button_Click in einem InkCanvas-Objekt speichere, die Canvas leere und darauf, nach einem anderen Button_Click, der InkCanvas, das erstellte InkCanvas-Objekt übergebe, erhalte ich nicht meine Notiz zurück. Selbiges gilt auch für den InkPresenter und dem StrokeContainer.
Was mache ich da Falsch?
Vielen Dank
Agredo
Ich stehe momentan vor einem Problem. Ich möchte eine handschriftliche Notiz, welche ich in einer Win10 Universal App mittels der InkCanvas eingebe, speichern.
Die Datei aysnchron als Datei zu speichern und zu laden ist nicht das Problem.
Ich habe eine Klasse Cards, die mir die Notiz speichern soll. Und eine Klasse Stack, die mehrere Cards als Liste speichert.
Die Stack-Objekte die jeweils die Cards enthalten werden in einer Liste gespeichert. Nun möchte ich diese Liste Speichern.
Das Problem ist, dass ich keinen Weg finde dieses Objekt zu serialisieren oder in LocalSettings zu speichern.
Ich habe einen Weg gefunden, der über eine JASON Bibliothek führt, dort kommt es aber zu einem Loop bei der Canvas.
"Self referencing loop detected for property 'InkPresenter' with type 'Windows.UI.Input.Inking.InkPresenter'. Path '[0].Cards[0].InkCanvas.InkPresenter.StrokeInput'"
In der Zeile
string val = JsonConvert.SerializeObject(value);
Eine zweite Sache ist:
Wenn ich die InkCanvas bemale diese dann nach einem Button_Click in einem InkCanvas-Objekt speichere, die Canvas leere und darauf, nach einem anderen Button_Click, der InkCanvas, das erstellte InkCanvas-Objekt übergebe, erhalte ich nicht meine Notiz zurück. Selbiges gilt auch für den InkPresenter und dem StrokeContainer.
Was mache ich da Falsch?
Vielen Dank
Agredo
Code:
public class Stack
{
public string Name { get; set; }
public List<Card> Cards { get; set; }
public Stack()
{
Cards = new List<Card>();
}
public Stack(string Name)
{
Cards = new List<Card>();
this.Name = Name;
}
public static void SaveStacks(List<Stack> Stacks)
{
//Lokales Speichern der Liste
Stack.SaveStack("myStacks", Stacks);
}
public void addCard(InkCanvas myCanvas)
{
Cards.Add(new Card(myCanvas));
}
public static T GetStack<T>(string name)
{
var localSettings = ApplicationData.Current.LocalSettings;
if (localSettings.Values.ContainsKey(name) && localSettings.Values.ContainsKey(name + "Type"))
{
var type = Type.GetType((string)localSettings.Values[name + "Type"]);
var val = (string)localSettings.Values[name];
if (type == null || val == null)
return default(T);
else
return (T)JsonConvert.DeserializeObject(val, type);
}
else
return default(T);
}
public static bool SaveStack(string name, object value)
{
string val = JsonConvert.SerializeObject(value);
Type type;
if (value != null)
type = value.GetType();
else
return false;
var localSettings = ApplicationData.Current.LocalSettings;
if (localSettings.Values.ContainsKey(name))
{
localSettings.Values[name + "Type"] = type.AssemblyQualifiedName;
localSettings.Values[name] = val;
}
else
{
localSettings.Values.Add(name, val);
localSettings.Values.Add(name + "Type", type.AssemblyQualifiedName);
}
return true;
}
}
Code:
public class Card
{
public InkCanvas InkCanvas { get; set; }
public Card(InkCanvas myInkCanvas)
{
InkCanvas = myInkCanvas;
}
public Card()
{
}
}