XamlparseException quando si vincola a ListBox
-
27-10-2019 - |
Domanda
Nella mia app sto permettendo agli utenti di salvare le foto dalla fotocamera e dalla libreria di foto a archiviazione isolata. Quindi ottengo il nome di ogni file e leggo la foto e aggiungo al mio elenco. Una volta creato l'elenco, lo lendo alla casella di riepilogo.
Posso ottenere circa 5 visualizzati senza problemi. Dopo aver scorretto l'eccezione:
System.Windows.Markup.XamlParseException occurred
Message= [Line: 0 Position: 0]
--- Inner Exception ---
KeyNotFoundException
Questo è il mio xaml:
<ListBox x:Name="userPhotosListBox">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel x:Name="DataTemplateStackPanel" Orientation="Horizontal">
<ContentControl Content="{Binding Image}" Width="400" />
<Image Name="{Binding FileName}" Source="/Images/appbar.delete.rest.png" Width="48" Height="48"
MouseLeftButtonUp="Image_MouseLeftButtonUp" VerticalAlignment="Center" HorizontalAlignment="Center" MaxWidth="48" MaxHeight="48" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Questo è il codice:
using (var store = IsolatedStorageFile.GetUserStoreForApplication())
{
var userFiles = store.GetFileNames();
foreach (var userFile in userFiles)
{
if (userFile.Contains(PhotoInIsolatedStoragePrefix))
{
var currentBitmap = ReadBitmapImageFromIso(userFile);
var userPhotoImage = new Image { Source = currentBitmap };
var userImg = new Img(userPhotoImage, userFile);
userPhotosListBox.Items.Add(userImg);
}
}
}
public class Img
{
public Img(Image img, string fileName)
{
this.Image = img;
this.FileName = fileName;
}
public Image Image { get; set; }
public string FileName { get; set; }
}
Molto nuovo per lo sviluppo di WP7 e confuso sul perché il mio codice funziona parzialmente.
Soluzione
Penso che tu abbia fatto un errore in: Name="{Binding FileName}"
Il nome deve iniziare con una lettera o il carattere di sottolineatura (_) e deve contenere solo lettere, cifre o sottolinearsi: guarda qui
Penso che alcuni dei nomi dei tuoi file non siano matematici con questi principi
Usa invece un'altra proprietà come il tag.
Altri suggerimenti
Dai un'occhiata a questo post: XamlparseException mi fa impazzire!
La linea di fondo è che spesso una XMLParseException è in realtà un TargetInvocationException che può essere determinato nella INNEREXception. Potrebbe essere un'ancora per ulteriori indagini.
Usare un:
try
{
}
catch(Exception ex)
{
}
Costruire e impostare un punto di interruzione sul pescato. Quindi ispezionare la variabile ex in modo più dettagliato per vedere se contiene una parte di InneRexception che può darti più approfondimenti.