2014-02-24 1 views
0

나는과 PathGeometryDefiningGeometry으로 지정합니다.
PathGeometry가 텍스트를 표시합니다.Hittest for PathGeometry

캔버스에서 도형을 선택하려고 할 때 경로의 텍스트 테두리에 정확히 있어야합니다.

주위를 사각형으로 칠 수 있기를 바랍니다.
Transparant Rectangle 지오메트리를 추가하면 어떻게 될까요? 크리슈나에 대한


코드 :

<DataTemplate DataType="{x:Type vm:TextLabel}"> 
    <c:Label Left="{Binding Left}" Top="{Binding Top}" IsDragEnabled="True" DragDeltaCommand="{Binding DragCommand}" Text="{Binding Text}" ToolTip="{Binding Code}" Fill="Black" StrokeThickness="0" x:Name="Label"/> 
    <DataTemplate.Triggers> 
     <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}, Path=IsSelected}" Value="True"> 
      <Setter TargetName="Label" Property="Fill" Value="Red"/> 
     </DataTrigger> 
    </DataTemplate.Triggers> 
</DataTemplate> 

그러나 c:Label는 포맷 된 텍스트 만 사용자 정의 모양이다. Fill은 텍스트의 브러시입니다. 따라서 문자 사이의 간격은 모양의 일부가 아닙니다. 이 사각형이 히트 테스트에 참여할 수 있도록 투명 사각형을 추가 할 수 있습니까?

답변

0

내부를 트리거를 변경하고 넣어해야 할 수도 있습니다 다음 코드는 작동 :
위쪽, 왼쪽 사용자 정의 DP는 캔버스에 모양에게 정확한 위치를 제공 할 수 있습니다 (Canvas.Top, Canvas.Left를 대체합니다.

protected override HitTestResult HitTestCore(PointHitTestParameters hitTestParameters) 
{ 
    var result = base.HitTestCore(hitTestParameters); 
    if (result == null && hitTestParameters.HitPoint.X < (Left + geometry.Bounds.Width) && hitTestParameters.HitPoint.X > Left) 
    { 
     if (hitTestParameters.HitPoint.Y < (Top + geometry.Bounds.Height) && hitTestParameters.HitPoint.Y > Top) 
     { 
      result = new PointHitTestResult(this, hitTestParameters.HitPoint); 
     } 
    } 
    return result; 
} 
1

컨테이너의 배경 속성을 Transparant로 설정하면 작동합니다. 예를 들어

경로는 다음 Grid.Background = "Transparant"그리드

내부에 이러한 편집 죄송 경우, 당신은 뭔가를 시도 할 수 있습니까? c : Label을 빈 그리드에 넣고 무슨 일이 일어나는 지 봅니다. 마찬가지로

<Grid Background=White> 
<c:Label Left="{Binding Left}" ...x:Name="Label"/> 
</Grid> 

당신은 Grid.Style

+0

모양이 목록 상자에 있습니다. 죄송합니다. 제안이 작동하지 않습니다. – Gerard

+0

항목 템플릿을 게시 할 수 있습니까? 또는 mousedown (선택 사항)이 snoop을 사용하는 다른 컨트롤에 의해 처리되고 있는지 확인할 수 있습니까? – Krishna

+0

edit 편집하십시오.'PadRight (15)' – Gerard