2017-10-20 5 views
0

私のテンプレートコントロールには、ボタンと楕円があります。 Interaction.Behaviorでclickイベントを追加しました。ボタンは正常に動作します。楕円は決してイベントを起こさない。どうして ?UWP対話。楕円での動作

<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-インデックス内のイベントを発生させることができます。

私のコードにはキャンバスがありません。 これはグリッド、パス、楕円のみです。

答えて

0

Interaction.Behaviorでクリックイベントを追加しました。ボタンは正常に動作します。楕円は決してイベントを起こさない。どうして ?

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> 

ポイントが楕円で押されると、コードビハインド内のマークが期待通りに実行されます。