1

いくつかのベータ ビットからアップグレードしているアプリがあります。マップ画面がクラッシュします。それで、その真相を探るために、私はまったく新しい空白の「Win Phone Application」を始めました。

参照された Caliburn.Micro (昨夜新しいコードからビルドされたばかり) バージョン: caliburnmicro_1296ea635677 (codeplex から)

Microsoft.phone.controls.map.dll を参照

そして私が追加したMainPageで

<Grid>
 <Maps:Map />
</Grid>

app.xaml にブートストラッパーを追加します。

<WP7:PhoneBootStrapper x:Name="bootstrapper" />

電話エミュレーターでページを実行すると、メイン ページがレンダリングされ、世界地図が表示されます。ページの任意の場所をクリックすると、「パラメーターが正しくありません」という未処理の例外が発生します

を削除すると

app.xaml から - マップは正しく機能します。

どう思いますか?

アドバイスありがとうございます。

4

1 に答える 1

1

私は答えを見つけました。

ここで重要なのは、このセットアップを行い、ベータテンプレートを使用して動作し、VS2010でWinPhoneRTMテンプレートに移動すると機能しなくなったことです。

Caliburnは、私に代わっていくつかの作業を行います。これは、RTMテンプレートに「追加」されたもので、互いに競合していました。結局、この問題はBingMapsコントロールとは何の関係もありませんでした-たまたま-それが私の最初の画面でした-そこで私は問題を解決しようとしていました。

これはこれまでにないほど役に立たない例外でした:

The parameter is incorrect

これは、どの画面でも発生すると確信しています。私のように、テンプレートのアップグレードパスに移動した場合。これが私が削除しなければならなかったものです-すべてを正常に戻すために。新しいApp.Xaml.csで-AppCtorで(コメントによって)削除しました...

// Phone-specific initialization
// InitializePhoneApplication();


// Global handler for uncaught exceptions. 
// UnhandledException += Application_UnhandledException;

そして、これらのメソッド本体を削除しました。これは、ctorからInitializePhoneApplication()呼び出しを削除した後のデッドコードであるためです...

// Code to execute when the application is launching (eg, from Start)
// This code will not execute when the application is reactivated
private void Application_Launching(object sender, LaunchingEventArgs e)
{
}

// Code to execute when the application is activated (brought to foreground)
// This code will not execute when the application is first launched
private void Application_Activated(object sender, ActivatedEventArgs e)
{
}

// Code to execute when the application is deactivated (sent to background)
// This code will not execute when the application is closing
private void Application_Deactivated(object sender, DeactivatedEventArgs e)
{
}

// Code to execute when the application is closing (eg, user hit Back)
// This code will not execute when the application is deactivated
private void Application_Closing(object sender, ClosingEventArgs e)
{
}

// Code to execute if a navigation fails
private void RootFrame_NavigationFailed(object sender, NavigationFailedEventArgs e)
{
    if (System.Diagnostics.Debugger.IsAttached)
    {
        // A navigation has failed; break into the debugger
        System.Diagnostics.Debugger.Break();
    }
}

// Code to execute on Unhandled Exceptions
private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
{
    if (System.Diagnostics.Debugger.IsAttached)
    {
        // An unhandled exception has occurred; break into the debugger
        System.Diagnostics.Debugger.Break();
    }
}

#region Phone application initialization

// Avoid double-initialization
private bool phoneApplicationInitialized = false;

// Do not add any additional code to this method
private void InitializePhoneApplication()
{
    if (phoneApplicationInitialized)
        return;

    // Create the frame but don't set it as RootVisual yet; this allows the splash
    // screen to remain active until the application is ready to render.
    RootFrame = new PhoneApplicationFrame();
    RootFrame.Navigated += CompleteInitializePhoneApplication;

    // Handle navigation failures
    RootFrame.NavigationFailed += RootFrame_NavigationFailed;

    // Ensure we don't initialize again
    phoneApplicationInitialized = true;
}

// Do not add any additional code to this method
private void CompleteInitializePhoneApplication(object sender, NavigationEventArgs e)
{
    // Set the root visual to allow the application to render
    if (RootVisual != RootFrame)
        RootVisual = RootFrame;

    // Remove this handler since it is no longer needed
    RootFrame.Navigated -= CompleteInitializePhoneApplication;
}

#endregion

この謎を解くのを手伝ってくれたロブに特に感謝します!

于 2010-12-27T15:13:54.887 に答える