4

我正在尝试下载图像并在完成时触发事件。我用这个:

BitmapImage btest = new BitmapImage(new Uri("http://www.google.com/images/srpr/logo4w.png"));
btest.ImageOpened += btest_ImageOpened;

void btest_ImageOpened(object sender, RoutedEventArgs e)
{
    throw new NotImplementedException();
}

但是,该ImageOpened事件不会触发。如果我将图像控件的源设置为BitmapImage使用:

image.Source = btest;

它确实火。ImageOpened除非将BitmapImage发件人设置为图像的源,否则为什么事件不会触发?

4

4 回答 4

5

我自己想通了。默认情况下,除非需要,否则不会初始化 BitmapImage。BitmapImage 的默认CreateOptions值为BitmapCreateOptions.DelayCreation. 解决此问题所需要做的就是设置CreateOptionsBitmapCreateOptions.None.

我的工作代码是:

BitmapImage btest = new BitmapImage(new Uri("http://www.google.com/images/srpr/logo4w.png"));
btest.CreateOptions = BitmapCreateOptions.None;
btest.ImageOpened += btest_ImageOpened;

void btest_ImageOpened(object sender, RoutedEventArgs e)
{
    throw new NotImplementedException();
}
于 2013-03-25T22:16:02.520 回答
1

(我将根据我们的讨论发布这个 - 因为它帮助 OP 找到了正确的解决方案)

我猜-它从未使用过-因此它永远不会加载或打开-只是一个想法,但我认为是有道理的

于 2013-03-25T22:27:25.653 回答
1

我的两分钱,也许它可以帮助其他人......在页面上放置一个图像控件并在 xaml 中连接任何事件和源都可以正常工作,并且事件会触发。但是,当我在代码中加载位图图像并设置图像控件的源时,尽管图像加载正常,但图像控件的事件不会触发。我尝试了上述所有位图选项,但似乎都没有奏效。我最终处理了位图图像的 ImageOpened 事件,而不是触发事件的图像控件的 ImageOpened 事件。请注意,尽管在此阶段图像控件尚未完全加载图像,因此您必须参考位图图像以获取详细信息,而不是图像控件。

于 2016-02-03T09:34:58.123 回答
0

在我的 Windows phone 8.0 silverlight 应用程序中,当我将创建选项设置为 BitmapCreateOptions.BackgroundCreation.

设置为时我不明白

BitmapCreateOptions.DelayCreation(这是默认设置)

或者BitmapCreateOptions.None

于 2014-08-29T16:07:45.387 回答