2017-10-20 13 views
0

내 템플릿 컨트롤에 버튼과 타원이 있습니다. Interaction.Behavior가있는 클릭 이벤트를 추가했습니다. 버튼이 잘 작동합니다. 타원은 결코 그 사건을 해고하지 않습니다. 왜 ?UWP Interaction.Behavior with Ellipse

<Style TargetType="local:SensorMeter"> 
    <Setter Property="UseSystemFocusVisuals" Value="True"></Setter> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="local:SensorMeter"> 
       <Viewbox> 


    <Ellipse x:Name="PART_MeterCenter" RenderTransformOrigin="0.5,0.5" HorizontalAlignment="Center" VerticalAlignment="Center"> 
     <Ellipse.RenderTransform> 
      <CompositeTransform/> 
     </Ellipse.RenderTransform> 

     <interactivity:Interaction.Behaviors> 
      <core:EventTriggerBehavior EventName="Click"> 
       <core:InvokeCommandAction Command="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=CenterCommand}" 
             CommandParameter="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=CenterCommandParameter}"/> 
      </core:EventTriggerBehavior> 
     </interactivity:Interaction.Behaviors> 

    </Ellipse> 
    <Button Content="ClickBtn"> 

     <interactivity:Interaction.Behaviors> 
      <core:EventTriggerBehavior EventName="Click"> 
       <core:InvokeCommandAction Command="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=CenterCommand}" 
             CommandParameter="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=CenterCommandParameter}"/> 
      </core:EventTriggerBehavior> 
     </interactivity:Interaction.Behaviors> 

    </Button>......... 

이 코드를 TemplateControl C# 코드에 그립니다.

 var _meterCenter = _sensorMeter.GetTemplateChild("PART_MeterCenter") as Ellipse; 
     if (_meterCenter != null) 
     { 
      _meterCenter.Stroke = _sensorMeter.MeterBorder_Brush; 
      _meterCenter.StrokeThickness = _sensorMeter.MeterBorderWidth; 
      _meterCenter.Fill = _sensorMeter.CenterThresHoldColor; 
      _meterCenter.Opacity = Opacity; 
      _meterCenter.Height = _sensorMeter.meterCenterSize * 2; 
      _meterCenter.Width = _sensorMeter.meterCenterSize * 2; 
      _meterCenter.Margin = new Thickness(0, _sensorMeter.MeterYOffset*2, 0, 0); 
     } 

사실 내 코드에는 그리드, 경로, 타원이 많이 있습니다. 클릭 이벤트를 수락하려면 가장 상위 레이어로 이동해야합니까? 버튼은 동일한 Z- 인덱스에서 이벤트를 발생시킬 수 있습니다.

내 코드에는 캔버스가 없습니다. 여기에는 Grid, Path, Ellipse 만 있습니다.

답변

0

Interaction.Behavior를 사용하여 click 이벤트를 추가했습니다. 버튼이 잘 작동합니다. 타원은 결코 그 사건을 해고하지 않습니다. 왜 ?

EllipseButton 같은 더 Click 이벤트가 없습니다. 따라서 Command은 실행되지 않습니다. 귀하의 요구 사항에 따라 다음 코드와 같이 PointerPressed 타원의 이벤트를 관찰 할 수 있습니다.

<Interactivity:Interaction.Behaviors> 
    <core:EventTriggerBehavior EventName="PointerPressed"> 
     <core:InvokeCommandAction Command="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=CenterCommand}" /> 
    </core:EventTriggerBehavior> 
</Interactivity:Interaction.Behaviors> 

타원에서 점이 눌려지면 코드 숨김의 명령이 예상대로 실행됩니다.