2012-06-21 1 views
1

У меня есть изображение в WPF, что я хотел бы иметь различную информацию, основанную на том, где мышь в настоящее время витает. Я знаю, что видел это на веб-сайтах, я просто не могу понять код, чтобы сделать это в WPF.Несколько областей для события mouseover в одном изображении

Изображение, которое я использую, представляет собой карту США, и мне нужна информация о состоянии, которая будет отображаться, когда пользователь пересекает границы. В настоящее время реализация, которую я использую, представляет собой серию Path s, нарисованную прозрачно поверх карты, а затем с помощью события Mouse.MouseEnter, чтобы вызвать изменение. Проблема в том, что обновление, похоже, страдает от ужасного запаздывания, иначе событие MouseEnter не всегда ловятся должным образом.

Кто-нибудь знает, как лучше это сделать?

Образец C#

private void wyoming_MouseEnter(object sender, MouseEventArgs e) 
    {    
     //stateName.Text = "Wyoming";    
    } 

Пример XAML

<Canvas MouseDown="Canvas_MouseDown" Name="canvas"> 
    <Viewbox Stretch="Uniform"> 
     <Image Source="USA.png" /> 
    </Viewbox> 
    <Path Name="wyoming" Stroke="Transparent" StrokeThickness="1" Mouse.MouseEnter="wyoming_MouseEnter" Mouse.MouseMove="wyoming_MouseMove"> 
     <Path.Data> 
      <PathGeometry> 
       <PathGeometry.Figures> 
        <PathFigureCollection> 
         <PathFigure IsClosed="True" StartPoint="184,121" > <!--NW--> 
          <PathFigure.Segments> 
           <PathSegmentCollection> 
            <LineSegment Point="266,129" /> 
            <LineSegment Point="264,193" /> 
            <LineSegment Point="203,190" /> 
            <LineSegment Point="177,186" /> 
           </PathSegmentCollection> 
          </PathFigure.Segments> 
         </PathFigure> 
        </PathFigureCollection> 
       </PathGeometry.Figures> 
      </PathGeometry> 
     </Path.Data> 
    </Path> 
</Canvas> 

ответ

0

Лично я сделал для этого же экземпляра (за исключением я мечения данные, касающиеся временных зон и вещания областей) был я сделанные прозрачные формы пути для областей, которые я хочу активировать при наведении курсора мыши, и положили их на карту США, затем я подключил триггер события для каждого из MouseEnter/MouseLeave события, поэтому, когда пользователь будет курсировать над областью какого-либо Пути, он отключит это условие и выполнит указанное действие .... в моем случае он показывал время радиопередачи радиостанций и программы на основе региона и часового пояса. Поэтому, если они были Moused, видимость информационного окна была установлена ​​на Visible. На MouseLeave то же информационное окно было установлено на Collapsed .... и т. Д.

Это было очень эффективно и хорошо работало, и вы можете сделать свои интерактивные области очень определенными при использовании точных фигур, которые вы сделали с помощью ваших Путей. Если я смогу выкопать исходный код, я попытаюсь поделиться, но проект был более года назад, поэтому, надеюсь, описание дает вам достаточно идеи, чтобы получить творческий подход. :)

1

Ну, после игры с этим больше, я обнаружил, что моя проблема в том, что я не заполнял пути, только держал их как линии. В основном это было сделано для очень маленькой зоны триггера событий, и поскольку такой WPF иногда пропускал событие. Заполняя их Прозрачным, все работает быстро.

+0

Прохладный, я забыл упомянуть эту деталь, но рад, что у вас есть исправление, предположим, что я не смогу выкапывать этот пример после всех lol, ура :) –

Смежные вопросы