0

我一直在谷歌搜索如何实际实现这一点,但无济于事。找不到有关如何使用 Caliburn Micro 实际执行此操作的单一资源。

基本上,我正在尝试这个http://www.developer.nokia.com/Community/Wiki/OAuth_on_Windows_Phone

在示例中,它用作redirect_uri普通链接。我用协议/文件关联(参考http://www.developer.nokia.com/Community/Wiki/URI_associations_for_Windows_Phone_8)做到了。一切正常。我让它在没有 Caliburn Micro 的情况下工作。

但是基于那个例子,我需要实现UriMapperBase并将其分配给RootFrame.UriMapper.

我的问题是我如何实际UriMapper使用 CaliburnMicro 为 WP8 实现。对于 Win 8,它是不同的,因为我可以覆盖OnActivate并检查ActivationKind.Protocol并且不需要UriMapper.

4

1 回答 1

3

好的。终于设法让它工作了。所以,将它发布在这里,因为我很确定会有一个像我一样迷失的灵魂会欣赏这个答案。

要在 Caliburn 中使用,UriMapper您需要覆盖CreatePhoneApplicationFrame.bootsrapper

Boostrapper.cs

protected override PhoneApplicationFrame CreatePhoneApplicationFrame()
{
    // var frame = base.CreatePhoneApplicationFrame(); this doesnt work
    var frame = new PhoneApplicationFrame(); // this works
    frame.UriMapper = new AssociationUriMapper();

    return frame;
}

AssociationUriMapper.cs- 我只是按照上面的链接按照示例进行操作

public class AssociationUriMapper : UriMapperBase
{
    private string tempUri;


    public override Uri MapUri(Uri uri)
    {
        tempUri = System.Net.HttpUtility.UrlDecode(uri.ToString());

        // URI association launch for contoso.
        if (tempUri.Contains("pocketthis:MainPage"))
        {
            // Get the category ID (after "CategoryID=").
            //int categoryIdIndex = tempUri.IndexOf("CategoryID=") + 11;
            //string categoryId = tempUri.Substring(categoryIdIndex);

            // Views/MainPage.xaml returns external exception, 
            // so remember the / before views
            return new Uri("/Views/MainPage.xaml", UriKind.Relative);
        }

        // Otherwise perform normal launch.
        return uri;
    }
}

希望这将有助于任何尝试在 WP8 中使用 Caliburn Micro 实现 Uri/文件关联的人。

于 2013-04-17T12:56:16.000 回答