2014-09-13 5 views
0

Итак, я сделал «крошечную» страницу проводника файлов в своем музыкальном проигрывателе (Universal App), и мне нужно разместить изображение, информирующее, что это каталог или файл. Но код не работает. Это сам конвертер: namespace myApp перед его собственным пространством имен.FileAttributes to ImageSource: IValueConverter не работает

namespace Converters 
{ 
    public sealed class AttributesToImageConverter : Windows.UI.Xaml.Data.IValueConverter 
    { 
     public object Convert (object value, Type targetType, object parameter, string language) 
     { 
      FileAttributes f = (FileAttributes)value; 
      Windows.UI.Xaml.Media.Imaging.BitmapImage img = new Windows.UI.Xaml.Media.Imaging.BitmapImage (); 
      img.DecodePixelWidth = 50; 
      if (f == FileAttributes.Directory) 
      { 
       img.UriSource = new Uri ("ms-appx:/Asstes/folder.png", UriKind.Absolute); 
      } 
      else 
       img.UriSource = new Uri ("ms-appx:/Asstes/file.png", UriKind.Absolute); 
      return img; 
     } 

     public object ConvertBack (object value, Type targetType, object parameter, string language) 
     { 
      throw new NotImplementedException (); 
     } 
    } 
} 

Это XAML:

<Page 
    ... 
    xmlns:converter="using:myApp.Converters" > 

    <Page.Resources> 
     <converter:AttributesToImageConverter x:Key="AttributesToImageConverter" /> 
    </Page.Resources> 

    ... 
    <Grid x:Name="LayoutRoot" DataContext=""> 
    ... 
     <ListView x:Name="ContentRoot" ItemsSource="{Binding List}" Height="500" Margin="10,-10,10,15" Background="Transparent" BorderBrush="Transparent" > 
      <ListView.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal" Margin="2,2,2,2"> 
         <Image Width="50" Height="50" Margin="5,0,5,0" Source="{Binding Attributes, Converter={StaticResource AttributesToImageConverter}}" /> 
         <TextBlock Text="{Binding Name}" Foreground="White" /> 
        </StackPanel> 
       </DataTemplate> 
      </ListView.ItemTemplate> 
     </ListView> 
    ... 
    </Grid> 

Другие Наручники в этом контексте работы, привязка к имени свойства в том же IStorageItem отлично работает, это один не делает. Кроме того, использование ListView заставляет приложение отключать несколько секунд ПОСЛЕ отображения загруженных данных без какой-либо отладочной информации или исключения, кроме кода -2147483645 (0x80000003). Буду признателен за любую помощь.

+1

вам нужно возвратить источник изображения не изображение –

ответ

0

Действительно ли атрибуты «Атрибуты» для каждого элемента в «Список» ItemsSource или это отдельное свойство в вашей модели просмотра?

Создание файла для хранения с путем файла вы перечислили, а затем использовать следующий пример:

var imageFile = args.Files[0] as StorageFile; 

// Ensure the stream is disposed once the image is loaded 
using (IRandomAccessStream fileStream = await imageFile.OpenAsync(Windows.Storage.FileAccessMode.Read)) 
{ 
    // Set the image source to the selected bitmap 
    var bitmapImage = new BitmapImage(); 

    await bitmapImage.SetSourceAsync(fileStream); 
    return bitmapImage; 
}