简体   繁体   中英

Image source changing in C# for windows phone 8.1 RT

I want to change image source in runtime using C#. I tried this.

In the MainPage.xaml,

<Image x:Name="myImage" HorizontalAlignment="Left"
               Height="125"
               Margin="86,76,0,0"
               VerticalAlignment="Top"
               Width="220" />
        <Button Content="Button"
                HorizontalAlignment="Left"
                Margin="134,230,0,0"
                VerticalAlignment="Top"
                Click="Button_Click"/>

and in the MainPage.xaml.cs

private void Button_Click(object sender, RoutedEventArgs e)
        {
            myImage.Source = new BitmapImage(new Uri("/Assets/WorldCupFlags/Sri_Lanka.png", UriKind.Relative));
        }

It shows no compile time error but when I run this and click the Button it shows an exception. It says "An exception of type 'System.ArgumentException' occurred in mscorlib.ni.dll but was not handled in user code."

The hint is in the exception:

The given System.Uri cannot be converted into a Windows.Foundation.Uri

You need to use an absolute URI for Universal XAML apps:

myImage.Source = new BitmapImage(new Uri(
  "ms-appx:///Assets/WorldCupFlags/Sri_Lanka.png", UriKind.Absolute));

Within an async code block, do this:

imgMyImageControl.Source = await GetBitmapAsFile("Folder\\ImageFileName.png");

The GetBimpageAsFile function:

    /// <summary>
    /// Gets a bitmap image stored on the local file system
    /// </summary>
    /// <param name="strIFile">The input file path name</param>
    /// <returns>The requested bitmap image, if successful; else, null</returns>
    public static async Task<BitmapImage> GetBitmapAsFile(string strIFile)
    {
        try
        {
            StorageFile fOut = null;
            BitmapImage biOut = null;
            FileRandomAccessStream fasGet = null;

            if (!strIFile.Equals(""))
            {
                fOut = await Windows.Storage.ApplicationData.Current.LocalFolder.GetFileAsync(strIFile);
                if (fOut != null)
                {
                    fasGet = (FileRandomAccessStream)await fOut.OpenAsync(FileAccessMode.Read);
                    if (fasGet != null)
                    {
                        biOut = new BitmapImage();

                        if (biOut != null)
                        {
                            await biOut.SetSourceAsync(fasGet);

                            return biOut;
                        }
                        else
                            YourApp.App.ShowMessage(true, "Error", "GetBitmapAsFile", "Bitmap [" + strIFile + "] is not set.");
                    }
                    else
                        YourApp.App.ShowMessage(true, "Error", "GetBitmapAsFile", "File stream [" + strIFile + "] is not set.");
                }
            }
            else
                YourApp.App.ShowMessage(true, "Error", "GetBitmapAsFile", "Input file path name is empty.");
        }
        catch (Exception ex)
        {
            YourApp.App.ShowMessage(true, "Error", "GetBitmapAsFile", "[" + strIFile + "] " + ex.Message);
        }

        return null;
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM