Установка источника изображения программно в приложении Metro, изображение не появляется

У меня есть главная страница и страница камеры в моем приложении. На главной странице есть изображение, источник которого не указан, и кнопка. Если вы нажмете кнопку, вы попадете на страницу камеры. На странице камеры я делаю снимок и сохраняю его в библиотеке изображений на планшете, а затем возвращаюсь на главную страницу, где я хотел бы установить источник изображения на изображение, которое я только что сделал и сохранил в своей библиотеке изображений. . Вот мой соответствующий код.

MainPage.xaml

<Image  x:Name="imgResume" HorizontalAlignment="Left" Height="303" Margin="975,60,0,0" Grid.Row="1" VerticalAlignment="Top" Width="360" Stretch="UniformToFill" Loaded="img_OnLoaded"/>
<Button x:Name="btnCamera" Content="Camera" HorizontalAlignment="Left" Margin="1128,372,0,0" Grid.Row="1" VerticalAlignment="Top" RenderTransformOrigin="2.05800008773804,0.184000000357628" Height="59" Width="108" Click="Camera_Click" IsEnabled="False"/>

MainPage.xaml.cs

private void img_OnLoaded(object sender, RoutedEventArgs e)
    {
        if (txtFirstName.Text != "" && txtLastName.Text != "")
        {
            try
            {
                imgResume.Source = ImageFromRelativePath(this, Windows.Storage.KnownFolders.PicturesLibrary.Path + ((App)Application.Current).candidate.FirstName + ((App)Application.Current).candidate.FirstName + "Resume.jpg");
                imgResume.UpdateLayout();
            }
            catch
            {
                imgResume.Source = ImageFromRelativePath(this, @"Assets/logo.png");
                imgResume.UpdateLayout();
            }
            btnCamera.IsEnabled = true;
        }
    }

    public static BitmapImage ImageFromRelativePath(FrameworkElement parent, string path)
    {
        var uri = new Uri(parent.BaseUri, path);
        BitmapImage result = new BitmapImage();
        result.UriSource = uri;
        return result;
    }

Camera.xaml.cs

private async void Capture_Click(object sender, RoutedEventArgs e)
    {
        if (mediaCaptureMgr != null)
        {
            string firstName = ((App)Application.Current).candidate.FirstName;
            string lastName = ((App)Application.Current).candidate.LastName;
            string fileName = firstName + lastName + "Resume.jpg";

            Windows.Storage.IStorageFile photo = await Windows.Storage.KnownFolders.PicturesLibrary.CreateFileAsync(fileName, Windows.Storage.CreationCollisionOption.ReplaceExisting);

            await mediaCaptureMgr.CapturePhotoToStorageFileAsync(Windows.Media.MediaProperties.ImageEncodingProperties.CreateJpeg(), photo);

            this.Frame.Navigate(typeof(BasicPersonalInfo));
        }
    }

Метод img_OnLoaded в файле MainPage.xaml пытается установить в качестве источника изображения изображение, которое я сохраняю в библиотеке изображений из метода Capture_click в файле Camera.xaml.cs.

Моя проблема в том, что изображение никогда не отображается на изображении на первой странице! Пожалуйста помоги!


person Jordan Brooker    schedule 06.08.2012    source источник
comment
Я пробовал оба ответа, но у меня не работает. Я нахожу любое решение на этой странице, и оно полностью работает для меня. http://www.c-sharpcorner.com/UploadFile/99bb20/load-image-dynamically-from-application-uri-in-windows-store/   -  person Evan Lin    schedule 19.02.2014


Ответы (2)


Это также может быть полезно для людей, пытающихся решить связанную с этим проблему обновления изображения из локального файла ресурсов.

myImage.Source = ImageFromRelativePath(this, "relative_path_to_file_make_sure_build_set_to_content");

public static BitmapImage ImageFromRelativePath(FrameworkElement parent, string path)
{
    var uri = new Uri(parent.BaseUri, path);
    BitmapImage result = new BitmapImage();
    result.UriSource = uri;
    return result;
}

Код взят из здесь .

person diadyne    schedule 31.08.2012
comment
Это заставило меня пойти по правильному пути. В итоге мне пришлось отменить ссылку на источник изображений, а затем удалить изображение и обновить макет, чтобы изображение было удалено с изображения. - person Jordan Brooker; 11.09.2012
comment
Столько строк кода для такой простой и привычной вещи. Почему Microsoft не может предоставить что-то вроде myImage = new Image(string imagePath); ? Вероятно, они не придерживаются того шаблона или другого кругового рывка, на который они подписаны. - person nedR; 16.09.2015

Я думаю, что эта часть является проблемой:

var uri = new Uri(parent.BaseUri, path);

Кажется, это попытка загрузить образ из папки установки, в то время как ваш путь является полным путем, который, я считаю, не поддерживается для открытия файлов в WinRT и, конечно, не работает как Uri даже с baseUri.

Вместо этого вы должны сделать что-то вроде:

var file = await Windows.Storage.KnownFolders.PicturesLibrary.GetFileAsync(((App)Application.Current).candidate.FirstName + "Resume.jpg");
var stream = await file.OpenReadAsync();
var bi = new BitmapImage();
bi.SetSource(stream);

return bi;
person Filip Skakun    schedule 06.08.2012