Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# BitmapImage的延迟加载_C#_.net_Windows Phone 8_Windows Phone_Bitmapimage - Fatal编程技术网

C# BitmapImage的延迟加载

C# BitmapImage的延迟加载,c#,.net,windows-phone-8,windows-phone,bitmapimage,C#,.net,Windows Phone 8,Windows Phone,Bitmapimage,我试图在WindowsPhone8的列表框中加载位图图像,并看到奇怪的行为。第一次显示页面时,列表框显示为空,但如果返回,则返回图像加载的页面。在我看来,图像似乎没有在需要时加载。这是我正在使用的代码(通过转换器): 我尝试过创建选项,但没有效果。听起来可能是源代码设置后视图没有刷新。加载一个空列表框。然后加载所有图像。什么也看不出来啊!但是当你回到页面,魔术!它们都在那里,因为整个视图被重新绘制(现在使用图像源)。如果在返回应用程序之前关闭了该应用程序,则应再次看到一个空列表框,因为必须重置源

我试图在WindowsPhone8的列表框中加载位图图像,并看到奇怪的行为。第一次显示页面时,列表框显示为空,但如果返回,则返回图像加载的页面。在我看来,图像似乎没有在需要时加载。这是我正在使用的代码(通过转换器):


我尝试过创建选项,但没有效果。

听起来可能是源代码设置后视图没有刷新。加载一个空列表框。然后加载所有图像。什么也看不出来啊!但是当你回到页面,魔术!它们都在那里,因为整个视图被重新绘制(现在使用图像源)。如果在返回应用程序之前关闭了该应用程序,则应再次看到一个空列表框,因为必须重置源。我不确定这在windows 8中是如何工作的,但您应该能够调用类似listbox.RefreshView()的函数来强制它重新绘制自身

听起来可能是源设置后视图没有刷新。加载一个空列表框。然后加载所有图像。什么也看不出来啊!但是当你回到页面,魔术!它们都在那里,因为整个视图被重新绘制(现在使用图像源)。如果在返回应用程序之前关闭了该应用程序,则应再次看到一个空列表框,因为必须重置源。我不确定这在windows 8中是如何工作的,但您应该能够调用类似listbox.RefreshView()的函数来强制它重新绘制自身

我实际上需要在我的ViewModel中的属性上调用
RaisePropertyChanged
,以强制更新,但您的回答为我指明了正确的方向。谢谢@teabags


奇怪的是,当我使用Pivot控件作为根元素时,这一点起了作用,但切换到Panorama肯定改变了事件顺序。

我实际上需要调用ViewModel中属性的
RaisePropertyChanged
来强制更新,但您的回答为我指明了正确的方向。谢谢@teabags

奇怪的是,当我使用Pivot控件作为根元素时,这种方法起作用了,但切换到Panorama肯定改变了事件顺序。

使用以下方法: img.CreateOptions=BitmapCreateOptions.BackGround

分配
private void BitmapImage\u ImageFailed(对象发送方,例外RoutedEventTargets e)
{
BitmapImage img=新的BitmapImage();
img.UriSource=newURI(“您的本地图像”,UriKind.Relative);
}
你的本地形象。 无论如何,渲染图像需要时间,这是迄今为止我发现的最好、最快的方法使用以下方法: img.CreateOptions=BitmapCreateOptions.BackGround

分配
private void BitmapImage\u ImageFailed(对象发送方,例外RoutedEventTargets e)
{
BitmapImage img=新的BitmapImage();
img.UriSource=newURI(“您的本地图像”,UriKind.Relative);
}
你的本地形象。
无论如何,渲染图像需要时间,这是迄今为止我发现的最好、最快的方法,听起来很合理。我添加了对
lstIcon.UpdateLayout()的调用
lstIcon.GetBindingExpression(ItemsControl.ItemsSourceProperty).UpdateSource()在页面加载事件之后,但仍然没有骰子。听起来很合理。我添加了对
lstIcon.UpdateLayout()的调用
lstIcon.GetBindingExpression(ItemsControl.ItemsSourceProperty).UpdateSource()在页面加载事件之后,但仍然没有骰子。
        BitmapImage img = null;
        StreamResourceInfo res = Application.GetResourceStream(new Uri("/MyAssembly;component/Resource/images/myimage.png", UriKind.Relative));
        Stream s = res.Stream;
        using (s) {
            img= new BitmapImage();
            img.SetSource(s);
        }
        img.CreateOptions = BitmapCreateOptions.None;