2011-05-19 4 views
9

FileInfoタイプのMediaFileプロパティを提供するviewmodelクラスがあり、このプロパティをMediaElementのSourceプロパティにバインドします。FileEnfoへのMediaElementのソース - プロパティのバインド

問題は、MediaElementのSourceプロパティはUriを期待していますが、FileInfoクラスのFullNameプロパティ(バインディングで定義されたコンバータ内)にアクセスできないため、SecurityExceptionが発生するためです。

イメージでは問題ありません。Imageコントロールは、FileInfoインスタンスのストリームを使用してコンバータで作成できるImageSourceオブジェクトを必要とするためです。

MediaElementが正しいソースを取得できるようにバインディングを定義するにはどうすればよいですか?または、MediaElementのSetSource(Stream)を呼び出すために、MediaElementをコンバータに渡すにはどうすればよいですか。

のViewModel:

public class ViewModel { 
    // additional code omitted 
    public FileInfo MediaFile {get; set;} 
} 

コンバータ:

public class FileInfoToMediaConverter : IValueConverter { 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { 
     var file = value as System.IO.FileInfo; 
     if (MediaResourceFactory.IsImage(file.Extension)) { 
      System.Windows.Media.Imaging.BitmapImage image = new System.Windows.Media.Imaging.BitmapImage(); 
      image.SetSource(file.OpenRead()); 
      return image; 
     } 
     else if (MediaResourceFactory.IsVideo(file.Extension)) { 
      // create source for MediaElement 
     } 
     return null; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { 
     throw new NotImplementedException(); 
    } 
} 

バインディング:

<Image Source="{Binding MediaFile, Converter={StaticResource fileInfoToMediaConverter} }"/> 
    <MediaElement Source="{Binding MediaFile, Converter={StaticResource fileInfoToMediaConverter}}/> 

答えて

5

ですアクセス権の高いブラウザが不足していますか?そうしないと、ローカルファイルシステムへのアクセス権がなくなり、セキュリティ例外が発生します。アクセス権のあるディレクトリ(マイドキュメント、マイピクチャなど)でもアクセス権のあるディレクトリに制限されます。あなたの答えのための

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
{ 
    var file = value as System.IO.FileInfo; 
    if (MediaResourceFactory.IsImage(file.Extension)) { 
     System.Windows.Media.Imaging.BitmapImage image = new System.Windows.Media.Imaging.BitmapImage(); 
     image.SetSource(file.OpenRead()); 
     return image; 
    } 
    else if (MediaResourceFactory.IsVideo(file.Extension)) { 
     // create source for MediaElement 
     return new Uri(file.FullName).AbsoluteUri; 
    } 
    return null; 
} 
+0

ありがとう:

はあなたが昇格権限でOOBされていると仮定すると、次のような何かを行うことができます。アプリケーションがIn-Browserを実行しているため、FullNameにアクセスするオプションはありません。 – Jehof

関連する問題