我需要在加载页面控件之前从代码中设置CredentialsProvider。我在后面的代码中有“ApiKey”依赖属性并将其绑定到Bing Maps silverlight Control但它不起作用。它在运行时给出错误“无效凭据”。
背后的代码
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,是从UserControl继承的。
答案 0 :(得分:6)
CredentialsProvider = new ApplicationIdCredentialsProvider("AbcdEfghIjklMNnoP_4rlMTclX8iXiNYUYQnG3GPYoxABCDEmoj3cCBemAAG")
答案 1 :(得分:0)
CredentialsProvider
属性不是字符串类型,并且不会自动将字符串转换为CredentialsProvider
实例(如何选择要转换为哪个子类?)
最好从代码中公开CredentialsProvider
实例。这样,您可以返回API密钥或客户端令牌,可能基于您的配置文件。
答案 2 :(得分:0)
经过多次努力之后,我终于发现当Thread.CurrentUICulture设置为不变文化时会发生这种情况。 确保它在App.Startup事件处理程序中设置为特定的文化(也考虑设置Thread.CurrentCulture),例如。
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");
当然,您仍然需要使用AppID正确设置凭据。 HTH。