C# 将图像源绑定到页面
我正试图让一个图像出现在UWP应用程序中的图像内部,这样我就可以将所选图像从图像选择器显示给最终用户。我可以根据用户通过filepicker拾取图像的情况判断当前文件设置是否正确,但表单上没有显示任何内容。有人能帮忙吗 MainPage.xamlC# 将图像源绑定到页面,c#,xaml,windows-store-apps,uwp,C#,Xaml,Windows Store Apps,Uwp,我正试图让一个图像出现在UWP应用程序中的图像内部,这样我就可以将所选图像从图像选择器显示给最终用户。我可以根据用户通过filepicker拾取图像的情况判断当前文件设置是否正确,但表单上没有显示任何内容。有人能帮忙吗 MainPage.xaml <Border Grid.Row="1" BorderBrush="WhiteSmoke" BorderThickness="2" Margin="5"> <Image Source="{Bin
<Border Grid.Row="1" BorderBrush="WhiteSmoke" BorderThickness="2" Margin="5">
<Image Source="{Binding CurrentFile}" Stretch="Fill" />
</Border>
这里的问题是,类型StorageFile不能转换为
图像的源。因此您必须使用ValueConverter或
将类型StorageFile更改为Image
因此,该属性将如下所示:
private Image _CurrentFile;
public Image CurrentFile
{
get
{
return _CurrentFile;
}
}
其中映像位于System.Windows.Controls命名空间下
这里的问题是,类型StorageFile不能转换为
图像的源。因此您必须使用ValueConverter或
将类型StorageFile更改为Image
因此,该属性将如下所示:
private Image _CurrentFile;
public Image CurrentFile
{
get
{
return _CurrentFile;
}
}
如果Image位于System.Windows.Controls命名空间下,则可以使用问题注释中提到的绑定转换器,或者将视图模型属性的类型更改为ImageSource: 然后,您可以从StorageFile创建BitmapImage并将其分配给属性,如下所示:
var bitmap = new BitmapImage();
await bitmap.SetSourceAsync(await file.OpenReadAsync());
CurrentImage = bitmap;
var picker = new FileOpenPicker
{
SuggestedStartLocation = PickerLocationId.PicturesLibrary
};
picker.FileTypeFilter.Add(".jpg");
picker.FileTypeFilter.Add(".jpeg");
picker.FileTypeFilter.Add(".png");
var file = await picker.PickSingleFileAsync();
if (file != null)
{
var bitmap = new BitmapImage();
await bitmap.SetSourceAsync(await file.OpenReadAsync());
viewModel.CurrentImage = bitmap;
}
当您在问题中提到图像选择器时,您可以使用以下代码:
var bitmap = new BitmapImage();
await bitmap.SetSourceAsync(await file.OpenReadAsync());
CurrentImage = bitmap;
var picker = new FileOpenPicker
{
SuggestedStartLocation = PickerLocationId.PicturesLibrary
};
picker.FileTypeFilter.Add(".jpg");
picker.FileTypeFilter.Add(".jpeg");
picker.FileTypeFilter.Add(".png");
var file = await picker.PickSingleFileAsync();
if (file != null)
{
var bitmap = new BitmapImage();
await bitmap.SetSourceAsync(await file.OpenReadAsync());
viewModel.CurrentImage = bitmap;
}
您可以使用问题注释中提到的绑定转换器,或者将视图模型属性的类型更改为ImageSource: 然后,您可以从StorageFile创建BitmapImage并将其分配给属性,如下所示:
var bitmap = new BitmapImage();
await bitmap.SetSourceAsync(await file.OpenReadAsync());
CurrentImage = bitmap;
var picker = new FileOpenPicker
{
SuggestedStartLocation = PickerLocationId.PicturesLibrary
};
picker.FileTypeFilter.Add(".jpg");
picker.FileTypeFilter.Add(".jpeg");
picker.FileTypeFilter.Add(".png");
var file = await picker.PickSingleFileAsync();
if (file != null)
{
var bitmap = new BitmapImage();
await bitmap.SetSourceAsync(await file.OpenReadAsync());
viewModel.CurrentImage = bitmap;
}
当您在问题中提到图像选择器时,您可以使用以下代码:
var bitmap = new BitmapImage();
await bitmap.SetSourceAsync(await file.OpenReadAsync());
CurrentImage = bitmap;
var picker = new FileOpenPicker
{
SuggestedStartLocation = PickerLocationId.PicturesLibrary
};
picker.FileTypeFilter.Add(".jpg");
picker.FileTypeFilter.Add(".jpeg");
picker.FileTypeFilter.Add(".png");
var file = await picker.PickSingleFileAsync();
if (file != null)
{
var bitmap = new BitmapImage();
await bitmap.SetSourceAsync(await file.OpenReadAsync());
viewModel.CurrentImage = bitmap;
}
根据@Clemens,我必须将属性的类型更改为图像源,然后在UI线程上异步加载它,以获得要显示的图像 在这种情况下,任何试图加载图像作为WPF图像类型源的人的答案是: 通过StorageFile set方法中的UI Dispatcher运行它:
//Acquire storagefile via a picker or something
public StorageFile CurrentFile
{
get { return currentImage; }
set {
SetValue(ref currentImage, value);
CoreWindow.GetForCurrentThread().Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => SetCurrentImageAsync(value));
}
}
将映像异步加载到CurrentImage属性
public ImageSource CurrentImage
{
get { return currentImage; }
set { SetValue(ref currentImage, value); }
}
public async Task SetCurrentImageAsync(StorageFile file) {
var bitmap = new BitmapImage();
await bitmap.SetSourceAsync(await file.OpenReadAsync());
this.CurrentImage = bitmap;
}
根据@Clemens,我必须将属性的类型更改为图像源,然后在UI线程上异步加载它,以获得要显示的图像 在这种情况下,任何试图加载图像作为WPF图像类型源的人的答案是: 通过StorageFile set方法中的UI Dispatcher运行它:
//Acquire storagefile via a picker or something
public StorageFile CurrentFile
{
get { return currentImage; }
set {
SetValue(ref currentImage, value);
CoreWindow.GetForCurrentThread().Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => SetCurrentImageAsync(value));
}
}
将映像异步加载到CurrentImage属性
public ImageSource CurrentImage
{
get { return currentImage; }
set { SetValue(ref currentImage, value); }
}
public async Task SetCurrentImageAsync(StorageFile file) {
var bitmap = new BitmapImage();
await bitmap.SetSourceAsync(await file.OpenReadAsync());
this.CurrentImage = bitmap;
}
我犯了一个错误,不是不匹配,注释无法编辑,因此被删除。我犯了一个错误,不是不匹配,注释无法编辑,因此被删除。您将需要一个转换器,并且可能很少使用async。这可能会对您有所帮助。您需要一个转换器,并且可能很少使用async。有可能对你有所帮助。