Помните, что я очень новичок в программировании. Мне удалось настроить изображения как пользовательские маркеры на бинговых картах, изображения выбраны и размещены на карте в соответствии с данными, поступающими из канала JSON. У меня есть страница просмотра списка, где можно просмотреть предупреждения о наводнениях, и нажатие на элемент в этом списке приведет вас к другой странице с подробной информацией об этом потоке. Я хочу, чтобы так, когда кто-то нажимает на маркер на карте, он доставит их на информационную страницу, соответствующую этому потоку. (Это немного сложно, но я надеюсь, что это понятно)NavigationService throwing AccessViolationException в C# на Windows Phone 8
У меня были большие трудности, чтобы получить эту работу, код для навигации из ListView на странице информации достаточно просто,
private void listBoxBeaches_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
GetSelectedItem();
}
private void GetSelectedItem()
{
RootObject item = listBoxBeaches.SelectedItem as RootObject;
ArDe = item.AreaDescription;
SeTe = item.SeverityTxt;
Rais = item.RaisedF;
MesEng = item.MessageEnglish;
MesCym = item.MessageWelsh;
if (item != null)
{
NavigationService.Navigate(new Uri(string.Format("/AlertInfoPage.xaml?area={0}&sev={1}&rais={2}&meseng={3}&mescym={4}",ArDe,SeTe,Rais,MesEng,MesCym) ,UriKind.Relative));
}
}
Но при попытке получить маркеры кликабельны, так что он переходит в том же месте было проблематично,
public string ArDe;
public string SeTe;
public string Rais;
public string MesEng;
public string MesCym;
public Grid marker;
public NavigationService navServ;
private Map myMap = new Map();
private MapLayer mylayer = new MapLayer();
public Map SetMapPins(List<RootObject>FloodList)
{
myMap.LandmarksEnabled = true;
myMap.PedestrianFeaturesEnabled = true;
myMap.Center = new GeoCoordinate(52.44, -4);
myMap.ZoomLevel = 7.8;
myMap.CartographicMode = MapCartographicMode.Road;
foreach (var flood in FloodList)
{
//this grabs the marker graphic
marker = flood.GetGrid();
MapOverlay myOverlay = new MapOverlay();
myOverlay.GeoCoordinate = new GeoCoordinate(flood.Center.Latitude, flood.Center.Longitude);
string AreaDes = flood.AreaDescription;
string SeverityTxt = flood.SeverityTxt;
string Raised = flood.Raised;
string EngMessage = flood.MessageEnglish;
string CymMessage = flood.MessageWelsh;
marker.MouseLeftButtonUp += (sender, args) => Floodpic_MouseLeftButtonUp(null, null, AreaDes, SeverityTxt, Raised, EngMessage, CymMessage);
myOverlay.Content = marker;
mylayer.Add(myOverlay);
}
myMap.Layers.Add(mylayer);
return myMap;
}
private void Floodpic_MouseLeftButtonUp(object sender, MouseButtonEventArgs e, string AreaDes, string SeverityTxt, string Raised, string EngMessage, string CymMessage)
{
GetSelectedMapItem(AreaDes, SeverityTxt, Raised, EngMessage, CymMessage);
}
public void GetSelectedMapItem(string AreaDes, string SeverityTxt, string Raised, string EngMessage, string CymMessage)
{
ArDe = AreaDes;
SeTe = SeverityTxt;
Rais = Raised;
MesEng = EngMessage;
MesCym = CymMessage;
//initially I used NavigationService.Navigate(new Uri(string.Format("/AlertInfoPage.xaml?area={0}&sev={1}&rais={2}&meseng={3}&mescym={4}",ArDe,SeTe,Rais,MesEng,MesCym) ,UriKind.Relative));
//but this gives me "An object reference is required for the non-static field method or property 'System.Windows.Navigation.NavigationService.Navigate(System.Uri)" error
Navigate(navServ, new Uri(string.Format("/AlertInfoPage.xaml?area={0}&sev={1}&rais={2}&meseng={3}&mescym={4}", ArDe, SeTe, Rais, MesEng, MesCym), UriKind.Relative));
}
public void Navigate(NavigationService s, Uri destination)
{
//This is where the AccessViolationException is thrown
s.Navigate(destination);
}
Просто так ясно, код ListView в навигации от фактической страницы (списке следует ListView.xaml.cs), в то время как код маркера не находится в файле cs на странице I'm naviga ting from (в SetMap.cs, а не MapView.xaml.cs, где есть карта и маркеры), то есть он перемещается извне.
Так что я не уверен, что нужно сделать, чтобы пройти это, я создал метод Navigation
из-за получения ссылки на объект требуется ошибка для
NavigationService.Navigate(new Uri(string.Format("/AlertInfoPage.xaml?area={0}&sev={1}&rais={2}&meseng={3}&mescym={4}",ArDe,SeTe,Rais,MesEng,MesCym) ,UriKind.Relative));
даже после попытки
this.NavigationService.Navigate(new Uri(string.Format("/AlertInfoPage.xaml?area={0}&sev={1}&rais={2}&meseng={3}&mescym={4}",ArDe,SeTe,Rais,MesEng,MesCym) ,UriKind.Relative));
Теперь я получаю обращение AccessViolationException, когда вызывается Navigate
. Есть идеи?
EDIT
Я пошел на более простое решение сейчас (используя CustomMessageBox, он получает работу), но я до сих пор очень ценю решение этой проблемы. Я понимаю, что это может быть невероятно конкретная проблема, и поэтому может потребоваться не менее конкретный ответ. Код немного размят, но это связано с отсутствием обучения или опыта.
я получаю ту же ошибку, как я с 'NavigationService.Navigate (новый Uri (String.Format ("/AlertInfoPage.xaml? Области = {0} & SEV = {1} & Раис = {2} & meseng = {3} & mescym = {4} ", ArDe, SeTe, Rais, MesEng, MesCym), UriKind.Relative));' Я получаю "Ссылка на объект требуется для метода или свойства нестатического поля" System.Windows.Navigation.NavigationService.Navigate (System.Uri) " – Marushiru
Символ' ~ '. Я думаю, что вы ошибаетесь –
Да, в вопросе я заявляю, что я пробовал это без него. Добавление '~' дает мне ту же ошибку »Ссылка на объект требуется для метода или свойства нестатического поля« System.Windows.Navigation.NavigationService.Navigate (System.Uri) » – Marushiru