La creazione di una griglia da stringa utilizzando XamlReader
-
05-10-2019 - |
Domanda
ho una rappresentazione di stringa di una griglia XAML in questo modo:
<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<Canvas Background="Yellow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<Label Content="textik" />
</Canvas>
</Grid>
Che cosa devo fare è di creare un oggetto griglia di questa stringa. Ho provato un sacco di approcci, ma finora il più vicino è il codice qui sotto:
string content = "<Grid xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"><Canvas Background=\"Yellow\" xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"><Label Content=\"textik\" /></Canvas></Grid>";
// the string is created programatically, I just put it here to see what it looks like at the end of the process
Stream stream = new MemoryStream(System.Text.ASCIIEncoding.ASCII.GetBytes(content));
object objGrid = XamlReader.Load(stream);
Grid myGrid = (Grid) objGrid;
Tuttavia, la verifica XamlParsedException dicendo che l'elemento principale è manca.
Devo un errore in un codice XAML che non riesco proprio a vedere? O è il cattivo approccio?
Grazie per una risposta ??p>
Soluzione
Quale versione del framework stai usando? In 4 si dispone di ulteriori classi in System.Xaml che sono più flessibili. È possibile utilizzare System.Xaml.XamlServices.Load(stream);
per ottenere l'oggetto esatto griglia in XAML sciolti. Tuttavia, utilizzando sia 4 e 3,5 in VS2010, il codice esatto (nel secondo frammento di) restituisce il risultato previsto. Non so quale sia il problema è dalla vostra parte, ma potrebbe non essere il codice che avete inviato.
Altri suggerimenti
Prova anche l'aggiunta xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
alla radice elemento Grid. Inoltre non è necessario xmlns di nuovo a tela (ma non fa male - se non che le corde diventano inutilmente grande)