不调试应用程序时,ImageBrush呈现白色

时间:2013-05-06 13:16:18

标签: xaml windows-phone-8 windows-phone winrt-xaml

我的应用程序出现了一些奇怪的黑魔法。

我在样式字典中定义了一个ImageBrush:

<classes:MultiResImageChooser x:Key="MultiResImageChooser"/>

<ImageBrush x:Name="SplashScreenImageBrush"
            ImageSource="{Binding SplashScreenResolutionImage, Source={StaticResource MultiResImageChooser}}"
            Stretch="Fill" />`

MultiResImageChooser类有一个简单的属性:

public class MultiResImageChooser
{
    public BitmapImage SplashScreenResolutionImage
    {
        get
        {
            switch (ResolutionHelper.CurrentResolution)
            {
                case Resolutions.HD720p:
                    return new BitmapImage(new Uri("/Images/SplashScreenImage.Screen-720p.jpg", UriKind.Relative));
                case Resolutions.WXGA:
                    return new BitmapImage(new Uri("/Images/SplashScreenImage.Screen-WXGA.jpg", UriKind.Relative));
                case Resolutions.WVGA:
                    return new BitmapImage(new Uri("/Images/SplashScreenImage.Screen-WVGA.jpg", UriKind.Relative));
                default:
                    throw new InvalidOperationException("Unknown resolution type");
            }
        }
    }
}

SplashScreenImageBrush绑定到Border元素的background属性:

<Border x:Name="SplashScreen" 
        Background="{StaticResource SplashScreenImageBrush}" 
        HorizontalAlignment="Stretch" 
        VerticalAlignment="Stretch" />

所以,问题是当我在WP8模拟器或WP8设备上调试应用程序时,一切正常。 在不调试的情况下启动应用程序时,Border背景属性将呈现为白色。 图像文件包含在项目中,并将“构建操作”设置为“内容”。

此外,如果我将ImageSource直接设置为图像路径,一切正常。

所以,问题似乎是MultiResImageChooser,但我不知道它有什么问题。

非常感谢任何形式的帮助或提示。

顺便说一句,这个问题不会在WP7.1设备和模拟器上重现。

1 个答案:

答案 0 :(得分:0)

我敢打赌:ResolutionHelper.CurrentResolution因某种原因无法正常工作(时间问题?),因此执行交换机的“默认”分支。因此,您的装订失败,画笔未初始化,而您获得白色。从那里开始,我首先确认执行“默认”分支,例如通过放置特定图像而不是抛出异常。然后,如果我的理论是正确的,请查看ResolutionHelper以了解正在发生的事情。