XamlParseException al vincular a ListBox
-
27-10-2019 - |
Pregunta
En mi aplicación estoy permitiendo a los usuarios guardar fotos de la cámara y la biblioteca de fotos al almacenamiento aislado. Luego obtengo el nombre de cada archivo y leo la foto y agrego a mi lista. Una vez que se construye la lista, la encuentro al cuadro de lista.
Puedo mostrar alrededor de 5 sin ningún problema. Después de desplazar, obtengo la excepción:
System.Windows.Markup.XamlParseException occurred
Message= [Line: 0 Position: 0]
--- Inner Exception ---
KeyNotFoundException
Este es mi 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>
Este es el código:
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; }
}
Muy nuevo en el desarrollo del WP7 y confundido sobre por qué mi código funciona parcialmente.
Solución
Creo que cometiste un error en: Name="{Binding FileName}"
El nombre debe comenzar con una letra o el carácter inferior (_), y debe contener solo letras, dígitos o subrayadores: mira aquí
Creo que algunos de sus nombres de archivo no son matemáticas con estos principios.
Use otra propiedad como etiqueta en su lugar.
Otros consejos
Mira esta publicación: XamlparseException me vuelvo loco!
La conclusión es que a menudo una XMLParseException es en realidad una TargetInvocationException que se puede determinar en la Innerexception. Eso podría ser un ancla para una mayor investigación.
Utilizar una:
try
{
}
catch(Exception ex)
{
}
Construya y establece un punto de interrupción en la captura. Luego inspeccione la variable EX con mayor detalle para ver si contiene una innerexcepción que puede darle más información.