windows phone 8.1 RT 在 C# 中更改图像源
Image source changing in C# for windows phone 8.1 RT
我想使用 C# 在 运行 时间内更改图像源。我试过了。
在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"/>
并在 MainPage.xaml.cs
private void Button_Click(object sender, RoutedEventArgs e)
{
myImage.Source = new BitmapImage(new Uri("/Assets/WorldCupFlags/Sri_Lanka.png", UriKind.Relative));
}
它没有显示编译时错误,但是当我 运行 它并单击 Button 时它显示异常。它说 "An exception of type 'System.ArgumentException' occurred in mscorlib.ni.dll but was not handled in user code."
提示在异常中:
The given System.Uri cannot be converted into a Windows.Foundation.Uri
您需要为通用 XAML 个应用程序使用绝对 URI:
myImage.Source = new BitmapImage(new Uri(
"ms-appx:///Assets/WorldCupFlags/Sri_Lanka.png", UriKind.Absolute));
在异步代码块中,执行此操作:
imgMyImageControl.Source = await GetBitmapAsFile("Folder\ImageFileName.png");
GetBimpageAsFile 函数:
/// <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;
}
我想使用 C# 在 运行 时间内更改图像源。我试过了。
在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"/>
并在 MainPage.xaml.cs
private void Button_Click(object sender, RoutedEventArgs e)
{
myImage.Source = new BitmapImage(new Uri("/Assets/WorldCupFlags/Sri_Lanka.png", UriKind.Relative));
}
它没有显示编译时错误,但是当我 运行 它并单击 Button 时它显示异常。它说 "An exception of type 'System.ArgumentException' occurred in mscorlib.ni.dll but was not handled in user code."
提示在异常中:
The given System.Uri cannot be converted into a Windows.Foundation.Uri
您需要为通用 XAML 个应用程序使用绝对 URI:
myImage.Source = new BitmapImage(new Uri(
"ms-appx:///Assets/WorldCupFlags/Sri_Lanka.png", UriKind.Absolute));
在异步代码块中,执行此操作:
imgMyImageControl.Source = await GetBitmapAsFile("Folder\ImageFileName.png");
GetBimpageAsFile 函数:
/// <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;
}