这似乎是一个严重的错误:
private void LayoutRoot_Drop(object sender, DragEventArgs e)
{
if ((e.Data != null) && (e.Data.GetDataPresent(DataFormats.FileDrop)))
{
FileInfo[] files = (FileInfo[])e.Data.GetData(DataFormats.FileDrop);
using (FileStream fileStream = files[0].OpenRead())
{
//Code reaching this point.
BitmapImage bmpImg = new BitmapImage();
bmpImg.ImageOpened += new EventHandler<RoutedEventArgs>(bmpImg_ImageOpened);
bmpImg.ImageFailed += new EventHandler<ExceptionRoutedEventArgs>(bmpImg_ImageFailed);
try
{
bmpImg.SetSource(fileStream);
}
catch
{
//Code dosen't reach here.
}
}
}
}
void bmpImg_ImageFailed(object sender, ExceptionRoutedEventArgs e)
{
//Code dosen't reach here.
}
void bmpImg_ImageOpened(object sender, RoutedEventArgs e)
{
//Code dosen't reach here.
}
我正在经历一个非常奇怪的傻瓜。在我的电脑上运行此代码,它可以正常工作 - 当您在LayoutRoot上拖动JPG时,我可以在bmpImg_ImageOpened()内部中断。
但是在不同的机器上它将无法工作 - 当拖动JPG时,我可以在drop事件中中断,但在SetSource()之后没有任何反应:没有抛出异常,并且没有调用回调。
我在另一台机器上尝试过它也没用。
编辑: 在所有机器上,添加Image类并将其Source属性设置为bitmapImage时,图像显示正常。所以我猜这是回调问题。这还不够,因为我仍然需要这些事件。
我在这里敲我的头,它会是什么?
答案 0 :(得分:1)
这就是Silverlight一直表现的方式。 ImageOpened
仅在下载和解码图像时触发(即使用Source
)。使用SetSource
时不会触发。如果您在加载图片后需要访问尺寸,请使用WriteableBitmap
和PixelWidth
属性(而不是PixelHeight
)或执行以下操作:
BitmapImage
答案 1 :(得分:1)
你必须设置
bitmapImage.CreateOptions = BitmapCreateOptions.None;
然后触发ImageOpened事件。这是因为默认选项是CreateDelayed
问候