0

アプリで奇妙な黒魔術が行われています。

スタイル ディクショナリで ImageBrush を定義しました。

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

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

MultiResImageChooser クラスには、単純なプロパティが 1 つあります。

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 background プロパティは White にレンダリングされます。画像ファイルがプロジェクトに含まれ、ビルド アクションがコンテンツに設定されます。

また、ImageSource を画像パスに直接設定すると、すべてが機能します。

したがって、問題は MultiResImageChooser にあるようですが、何が問題なのかわかりません。

どんな種類の助けやヒントも大歓迎です。

ところで、この問題は WP7.1 デバイスとエミュレーターでは再現されません。

4

1 に答える 1

0

私の賭け:ResolutionHelper.CurrentResolution何らかの理由 (タイミングの問題?) で正しく動作しないため、スイッチの「デフォルト」ブランチが実行されます。したがって、バインディングは失敗し、ブラシは初期化されず、代わりに白い色が得られます。そこから、「デフォルト」ブランチの実行を確認することから始めます。たとえば、例外をスローする代わりに特定の画像を配置します。次に、私の理論が正しい場合は、ResolutionHelper何が起こっているのかを理解するために を調べてください。

于 2013-05-06T20:24:55.263 に答える