单击图像并显示消息框,具体取决于单击的位置

时间:2016-06-01 19:07:07

标签: c# wpf

我对此世界地图图片有这个想法,当我点击其上的某个国家/地区时,它会在MessageBox中显示该国家/地区的信息,例如,是否有人知道该怎么做?

我有一个矩形和一个按钮,当我点击按钮时,它会在矩形中显示图像,但我想如果我使用多边形来塑造这个国家的但是我有点卡住了。

not possible

我想让每个国家分开,也许点击时边框会亮起

3 个答案:

答案 0 :(得分:5)

您可以使用WPF轻松完成此操作:

  1. 以SVG格式查找精彩的世界地图。我使用了维基百科的this one
  2. World Map Wikipedia

    1. 下载并安装Inkscape,然后打开刚刚下载的SVG。 Inkscape有一个很好的功能,可以将SVG保存为XAML。
    2. InkScape save dialog

      1. ViewBox从XAML文件导入WPF窗口/ etc:
      2. VS XAML editor

        1. 对于XAML中的每个Path,您可以添加MouseEnter / MouseLeave事件处理程序,也可以对所有Path使用相同的处理程序
        2. 示例代码:

           private void CountryMouseEnter(object sender, MouseEventArgs e)
           {
               var path = sender as Path;
               if (path != null)
               {
                   path.Fill = new SolidColorBrush(Colors.Aqua);
               }
           }
          
           private void Country_MouseLeave(object sender, MouseEventArgs e)
           {
               var path = sender as Path;
               if (path != null)
               {
                   path.Fill = new SolidColorBrush(Colors.Black);
               }
           }
          
          1. 现在只需改变颜色/显示MessageBox等等。

            Demo

          2. GitHub

答案 1 :(得分:0)

我的第一个想法:您可以将命令绑定到将通过单击某个位置触发的视图。如果您正在使用WPF,则可以将命令参数绑定到命令以获取单击的x和y ... 之后,您必须处理消息框的内容并根据位置xy突出显示边框。

玩得开心:D

答案 2 :(得分:0)

选项1

Code Project上有一个项目创建了一个项目,用于定义可随事件点击的热点。您可以使用它来覆盖您的地图并定义您需要它们的热点。

C# Windows Forms ImageMap Control

选项2

您可以绑定到图片上的MouseUp事件并使用以下内容查看它是否在Rectangle

private void mapMouseUp(object sender, MouseEventArgs e) {
    Rectangle rect1 = new Rectangle(0, 0, 100, 100);
    Rectangle rect2 = new Rectangle(0, 100, 100, 100);
    if (rect1.Contains(e.Location)) {
        // Do your stuff
    } else if (rect2.Contains(e.Location)) {
        // Do your stuff
    }
}