我正在尝试将嵌入式资源中的图像加载到Image
实例。问题是图像的大小始终为0.
以下是代码段:
Image image = new Image();
ImageSource img = new System.Windows.Media.Imaging.BitmapImage(new Uri("/Images/marker.png", UriKind.Relative));
image.SetValue(Image.SourceProperty, img);
System.Diagnostics.Debug.WriteLine("output 1 = " + image.DesiredSize.Width); // return 0
System.Diagnostics.Debug.WriteLine("output 2 = " + image.ActualWidth); // return 0
我必须知道图像在屏幕上呈现之前的大小,因为我需要根据图像的大小来偏移图像。
谢谢
更新:
谢谢Silvermind
我用示例代码
回答了我自己的问题答案 0 :(得分:2)
查看BitmapImage.DownloadProgress Event;
通过URI构造BitmapImage本质上是异步的。这个 关于施工进度的事件报告。
换句话说,在必须下载/构建ActualWidth
之前运行BitmapImage
可能会将{0}作为ActualWidth
返回。
答案 1 :(得分:1)
“/ Images / marker.png” - 您确定这是文件吗?
也许是因为文件夹被命名为没有大写的图像?
还会返回:
image.getValue(); // here what null? after setting it
答案 2 :(得分:0)
感谢Silvermind。他建议使用CreateOptions。
最后,我找到了一个解决方案:
Image image = new Image();
Uri uri = new Uri("/Images/marker_stop.png", UriKind.Relative);
BitmapImage bi = new BitmapImage(uri);
bi.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
image.Source = bi;
System.Diagnostics.Debug.WriteLine("************************************* in image.ActualWidth " + ", " + bi.PixelWidth); // return 30