2010-08-06 159 views
0

我需要在加载页面上的控件之前从代码背后设置CredentialsProvider。我在代码后面有“ApiKey”依赖项属性,并将其绑定到Bing Maps silverlight Control,但它不起作用。它在运行时出现错误“无效凭据”。设置Bing地图Silverlight控件属性从代码隐藏

代码隐藏

public static readonly DependencyProperty ApiKeyProperty = DependencyProperty.Register("ApiKey", typeof(string), typeof(MainPage), new PropertyMetadata("")); 
protected string ApiKey 
{ 
    get { return this.GetValue(ApiKeyProperty) as string; } 
    set { this.SetValue(ApiKeyProperty, value); } 
} 

XAML

<m:Map x:Name="map" Grid.Row="1" Grid.ColumnSpan="5" Margin="0" CredentialsProvider="{Binding ElementName=silverlightMap, Path=ApiKey}" 
       Mode="Road" MouseMove="map_MouseMove" MouseLeftButtonUp="map_MouseLeftButtonUp" MouseLeftButtonDown="map_MouseLeftButtonDown" 
       ViewChangeEnd="map_ViewChangeEnd"></m:Map> 

类名是和的MainPage正在从用户控件继承。

+0

您是否确认ApiKey属性get返回您的有效密钥? – DaveB 2010-08-06 15:58:17

+0

是的,我检查了很多次 – Neutralizer 2010-08-06 18:23:57

+0

我的这个问题太老了。我通过不使用它解决了这个问题。我会标记答案,检查谁在几天内获得最高票数。 – Neutralizer 2011-09-27 17:17:56

回答

0

CredentialsProvider属性是字符串类型不,不字符串自动转换为CredentialsProvider实例(如何将它选择转换到子类?)

你最好关闭曝光CredentialsProvider实例来自您的代码。这样,您可以根据您的配置文件返回API密钥或客户端令牌。

+0

是的,我曾尝试过,但CredentialsProvider是一个抽象类,我不能创建它的一个实例。 – Neutralizer 2010-08-07 14:09:52

+0

根据您想要如何使用Bing进行身份验证,您需要选择两个子类。这就是要点 - 一个字符串可以转换为这两个类中的任何一个,所以Bing不会为你自动转换字符串。阅读文档:http://msdn.microsoft.com/en-us/library/microsoft.maps.mapcontrol.core.credentialsprovider.aspx – 2010-08-07 15:04:39

6
CredentialsProvider = new ApplicationIdCredentialsProvider("AbcdEfghIjklMNnoP_4rlMTclX8iXiNYUYQnG3GPYoxABCDEmoj3cCBemAAG") 
0

多少辛劳之后,我终于发现,当Thread.CurrentUICulture设置为固定区域性发生这种情况。 确保它在App.Startup事件处理程序中设置为特定文化(也可以考虑设置Thread.CurrentCulture),例如

System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US"); 

当然,您仍然需要使用您的AppID正确设置凭据。 HTH。

相关问题