Skip to content

Commit 9cfb31c

Browse files
committed
修复了Gpx工具箱中文件列表中选择文件和点击菜单可能出现闪退的BUG
1 parent b4e2696 commit 9cfb31c

File tree

3 files changed

+79
-60
lines changed

3 files changed

+79
-60
lines changed

MapBoard.UI/UI/GpxToolbox/GpxWindow.xaml

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -408,24 +408,8 @@
408408
ItemsSource="{Binding Tracks}"
409409
PreviewKeyDown="ListViewItemPreviewDeleteKeyDown"
410410
SelectionChanged="FileSelectionChanged"
411+
PreviewMouseRightButtonDown="lvwFiles_PreviewMouseRightButtonDown"
411412
SelectionMode="Extended">
412-
413-
<ListView.ContextMenu>
414-
<ContextMenu>
415-
<MenuItem
416-
Click="RemoveTrackFileMenuClick"
417-
Header="删除" />
418-
<MenuItem
419-
Click="LinkTrackMenuClick"
420-
Header="连接" />
421-
<MenuItem
422-
Click="ZoomToTrackButtonClick"
423-
Header="缩放到轨迹" />
424-
<MenuItem
425-
Click="BrowseButtonClick"
426-
Header="浏览" />
427-
</ContextMenu>
428-
</ListView.ContextMenu>
429413
<ListView.View>
430414
<GridView>
431415
<GridViewColumn

MapBoard.UI/UI/GpxToolbox/GpxWindow.xaml.cs

Lines changed: 75 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -122,48 +122,60 @@ private void ListViewItemPreviewDeleteKeyDown(object sender, KeyEventArgs e)
122122
{
123123
if (e == null || e.Key == Key.Delete)
124124
{
125-
foreach (var item in lvwFiles.SelectedItems.Cast<TrackInfo>().ToArray())
126-
{
127-
arcMap.GraphicsOverlays.Remove(item.Overlay);
128-
Tracks.Remove(item);
129-
}
125+
RemoveSelectedGpxs();
130126
}
131127
}
132128

133-
private async void FileSelectionChanged(object sender, SelectionChangedEventArgs e)
129+
private void RemoveSelectedGpxs()
134130
{
135-
if (arcMap.SelectedTrack != null)
136-
{
137-
arcMap.SelectedTrack.Overlay.Renderer = null;
138-
arcMap.SelectedTrack.Overlay.Renderer = NormalRenderer;
139-
}
140-
if (lvwFiles.SelectedItem == null)
131+
foreach (var item in lvwFiles.SelectedItems.Cast<TrackInfo>().ToArray())
141132
{
142-
arcMap.SelectedTrack = null;
143-
Gpx = null;
144-
GpxTrack = null;
145-
chartHelper.Initialize();
146-
return;
133+
arcMap.GraphicsOverlays.Remove(item.Overlay);
134+
Tracks.Remove(item);
147135
}
136+
}
148137

149-
if (lvwFiles.SelectedItems.Count > 1)
138+
private async void FileSelectionChanged(object sender, SelectionChangedEventArgs e)
139+
{
140+
try
150141
{
151-
arcMap.SelectedTrack = null;
152-
Gpx = null;
153-
GpxTrack = null;
142+
if (arcMap.SelectedTrack != null)
143+
{
144+
arcMap.SelectedTrack.Overlay.Renderer = null;
145+
arcMap.SelectedTrack.Overlay.Renderer = NormalRenderer;
146+
}
147+
if (lvwFiles.SelectedItem == null)
148+
{
149+
arcMap.SelectedTrack = null;
150+
Gpx = null;
151+
GpxTrack = null;
152+
chartHelper.Initialize();
153+
return;
154+
}
154155

155-
chartHelper.Initialize();
156-
}
157-
else
158-
{
159-
arcMap.SelectedTrack = lvwFiles.SelectedItem as TrackInfo;
156+
if (lvwFiles.SelectedItems.Count > 1)
157+
{
158+
arcMap.SelectedTrack = null;
159+
Gpx = null;
160+
GpxTrack = null;
160161

161-
arcMap.SelectedTrack.Overlay.Renderer = CurrentRenderer;
162-
//arcMap.SelectedTrack.Overlay.Graphics[0].Symbol = CurrentLineSymbol;
162+
chartHelper.Initialize();
163+
}
164+
else
165+
{
166+
arcMap.SelectedTrack = lvwFiles.SelectedItem as TrackInfo;
167+
168+
arcMap.SelectedTrack.Overlay.Renderer = CurrentRenderer;
169+
//arcMap.SelectedTrack.Overlay.Graphics[0].Symbol = CurrentLineSymbol;
163170

164-
Gpx = arcMap.SelectedTrack.Gpx;
165-
GpxTrack = arcMap.SelectedTrack.Track;
166-
await Task.WhenAll(ZoomToTrackAsync(), UpdateUI());
171+
Gpx = arcMap.SelectedTrack.Gpx;
172+
GpxTrack = arcMap.SelectedTrack.Track;
173+
await Task.WhenAll(ZoomToTrackAsync(), UpdateUI());
174+
}
175+
}
176+
catch(Exception ex)
177+
{
178+
App.Log.Error("选择Gpx文件时出现错误",ex);
167179
}
168180
}
169181

@@ -591,10 +603,7 @@ private void ResetTrackButtonClick(object sender, RoutedEventArgs e)
591603
};
592604
}
593605

594-
private void RemoveTrackFileMenuClick(object sender, RoutedEventArgs e)
595-
{
596-
ListViewItemPreviewDeleteKeyDown(null, null);
597-
}
606+
598607

599608
private async void LinkTrackMenuClick(object sender, RoutedEventArgs e)
600609
{
@@ -783,10 +792,6 @@ private async void CaptureScreenButtonClick(object sender, RoutedEventArgs e)
783792
}
784793
}
785794

786-
private async void ZoomToTrackButtonClick(object sender, RoutedEventArgs e)
787-
{
788-
await ZoomToTrackAsync();
789-
}
790795

791796
private Task ZoomToTrackAsync(int time = 500)
792797
{
@@ -797,10 +802,38 @@ private Task ZoomToTrackAsync(int time = 500)
797802
return arcMap.SetViewpointAsync(new Viewpoint(GpxTrack.Points.Extent), TimeSpan.FromMilliseconds(time)); ;
798803
}
799804

800-
private void BrowseButtonClick(object sender, RoutedEventArgs e)
805+
806+
private void lvwFiles_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
801807
{
802-
GpxBrowseWindow window = new GpxBrowseWindow(lvwFiles.SelectedItem as TrackInfo);
803-
window.Show();
808+
ContextMenu menu = new ContextMenu
809+
{
810+
PlacementTarget = sender as UIElement
811+
};
812+
813+
if (lvwFiles.SelectedItems.Count > 0)
814+
{
815+
var menuRemove = new MenuItem() { Header = "移除" };
816+
menuRemove.Click += (s, e) => RemoveSelectedGpxs();
817+
menu.Items.Add(menuRemove);
818+
819+
if (lvwFiles.SelectedItems.Count > 1)
820+
{
821+
var menuLink = new MenuItem() { Header = "连接" };
822+
menuLink.Click += LinkTrackMenuClick;
823+
menu.Items.Add(menuLink);
824+
}
825+
}
826+
if (GpxTrack != null)
827+
{
828+
var menuZoom = new MenuItem() { Header = "缩放到轨迹" };
829+
menuZoom.Click += async (s, e) => await ZoomToTrackAsync();
830+
menu.Items.Add(menuZoom);
831+
832+
var menuBrowse = new MenuItem() { Header = "浏览" };
833+
menuBrowse.Click += (s, e) => new GpxBrowseWindow(lvwFiles.SelectedItem as TrackInfo).Show();
834+
menu.Items.Add(menuBrowse);
835+
}
836+
menu.IsOpen = true;
804837
}
805838
}
806839
}

日志.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1652,4 +1652,6 @@ Url DataGrid修改为ListBox+文本框,方便修改
16521652

16531653
## 20211219
16541654

1655-
将所有的文件对话框设置了父窗口,避免弹出的对话框在其他窗口之上的BUG
1655+
将所有的文件对话框设置了父窗口,避免弹出的对话框在其他窗口之上的BUG
1656+
1657+
修复了Gpx工具箱中文件列表中选择文件和点击菜单可能出现闪退的BUG

0 commit comments

Comments
 (0)