交互式地图wpf

时间:2015-08-22 16:50:17

标签: c# wpf dictionary

这是我的情况:我有很多照片可以在组装时提供完整的地图。每张图片都有一个文件名“x,y.png”,其中x和y是图片所代表的地图的坐标。

我想要做的是将所有这些照片组合到wpf中的交互式地图中。每个pic都是一个带有x和y坐标的单元格,我需要与用户交互:当鼠标结束时突出显示图片,点击动作等等。

我的地图是一个不是地球的自定义地图所以openstreetmap和这样的解决方案不起作用。

我看过谷歌和堆栈溢出,我没有找到任何东西。

我发现这个:http://www.codeproject.com/Articles/855699/Complete-Sudoku-Game-in-Csharp-WPF-Silverlight会很棒,但网格在xaml中手动分开,在我的情况下,这是不可能的,因为地图就像是80x80的单元格...

我考虑使用带有自定义数据模板的列表框,该模板显示了一个类单元格的图片,它将具有3个属性(x,y和图片uri),但我认为它不会呈现为完整的地图而没有你知道,洞和空白。

那么如何向用户显示呢?

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

我认为最简单的解决方案如下所示。

您可以通过编程方式生成80-80 RowDefinitionColumnDefinition,然后将它们添加到网格中:

for (int c = 0; c < 80; c++) mapGrid.ColumnDefinitions.Add(new ColumnDefinition{ Width = new GridLength(1, GridUnitType.Star) });
for (int r = 0; r < 80; r++) mapGrid.RowDefinitions.Add(new RowDefinition{ Width = new GridLength(1, GridUnitType.Star) });

然后您可以创建任何Image并将其添加到Grid

foreach (string path in mapImagePaths) { // mapImagePaths: a list of map image names
  var b = new BitmapImage();
  b.BeginInit();
  b.UriSource = new Uri(path, UriKind.Relative); // or Absolute
  b.CacheOption = BitmapCacheOption.OnLoad; // maybe needed
  b.EndInit();

  var i = new Image { Source = b, Stretch = Stretch.Uniform };

  Grid.SetRow(i, /*the row index based on the coordinates*/);
  Grid.SetColumn(i, /*the column index based on the coordinates*/);

  mapGrid.Children.Add(i);
}

我没有可能测试代码,但它应该可以工作......