这是我的情况:我有很多照片可以在组装时提供完整的地图。每张图片都有一个文件名“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),但我认为它不会呈现为完整的地图而没有你知道,洞和空白。
那么如何向用户显示呢?
感谢您的帮助
答案 0 :(得分:1)
我认为最简单的解决方案如下所示。
您可以通过编程方式生成80-80 RowDefinition
和ColumnDefinition
,然后将它们添加到网格中:
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);
}
我没有可能测试代码,但它应该可以工作......