2012-06-21 3 views
1

WPF에서 마우스가 현재 마우스를 가리키고있는 위치에 따라 다른 정보를 표시하고 싶은 이미지가 있습니다. 나는 웹 사이트에서 이것을 보았다는 것을 알았습니다. WPF에서 코드를 이해할 수없는 것 같습니다.단일 이미지에서 mouseover 이벤트에 대한 여러 영역

내가 사용중인 이미지는 미국지도이며, 사용자가 국경을 넘을 때 상태 정보가 필요합니다. 지금 내가 사용하고있는 구현은 Path 시리즈가지도 상단에 투명하게 그려지고 Mouse.MouseEnter 이벤트를 사용하여 변경을 트리거합니다. 문제는 업데이트가 끔찍한 지연으로 고통받는 것 같습니다. 그렇지 않으면 MouseEnter 이벤트가 항상 올바르게 캐치되지 않습니다.

아무에게도이 작업을 수행하는 더 좋은 방법이 있습니까?

<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

개인적으로 무엇을 (I 시간대 방송 영역에 관한 정보를 라벨 것을 제외하고) 나는이 같은 예를 들어 한 일은 I를 샘플 XAML

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

샘플 C#을했다 마우스 오버시 활성화 할 수있는 영역에 대한 투명한 경로 모양을 만들고이를 미국지도 위에 놓은 다음 MouseEnter/MouseLeave에 각각 이벤트 트리거를 연결했습니다. 이벤트 그래서 사용자가 어떤 경로의 영역 위에 마우스를 놓을 때, 그것은 그 조건을 해고하고 지정된 동작을 수행 할 것입니다 .... 내 인스턴스에서 그것은 라디오 방송 시간과 지역 및 시간대를 기반으로 한 프로그램을 보여주었습니다. 따라서 Moused가 끝나면 정보 상자 가시성이 Visible로 설정됩니다. MouseLeave 같은 정보 상자가 축소됨 ....으로 설정되었습니다.

매우 효과적이었고 실제로 잘 작동했으며 경로로 만든 정확한 모양을 사용할 때 상호 작용 영역을 매우 잘 정의 할 수 있습니다. 소스를 파헤 칠 수 있다면 시도해 보겠지 만 프로젝트가 1 년이 넘었으므로 설명을 통해 창의력을 발휘할 수있는 충분한 아이디어를 얻을 수 있습니다. :)

1

글쎄, 이것으로 더 놀아본 후, 나는 내 문제가 내가 길을 채우지 못했다는 것을 발견했다. 이것은 기본적으로 매우 작은 이벤트 트리거 영역을 위해 만들어졌으며 WPF는 때때로 이벤트를 놓쳤습니다. 투명하게 채우면 모든 것이 빠르게 작동합니다.

+0

차가운 나중에 그 세부 사항을 언급하는 것을 잊었지만 당신이 고칠 수있어 다행, 나는 그 축하해 모든 축하 후 그 예제를 파고 실 거예요 :) –