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