2017-12-22 16 views
0

私はこのようなControlTemplateで定義されたボタンがあります。私は、任意の場所をクリックするとWPFボタンのControlTemplateのは間違っclickboxに与え

<Button VerticalAlignment="Bottom" HorizontalAlignment="Right" Click="ButtonBase_OnClick"> 
    <Button.Template> 
     <ControlTemplate TargetType="Button"> 
      <Path Data="M-20,-60L-20,-20 -60,-20 -60,20 -20,20 -20,60 20,60 20,20 60,20 60,-20 20,-20 20,-60z"> 
       <Path.Style> 
        <Style TargetType="Path"> 
         <Setter Property="Stroke" Value="Red" /> 
         <Setter Property="Fill" Value="Blue" /> 
         <Style.Triggers> 
          <Trigger Property="IsMouseOver" Value="True"> 
           <Setter Property="StrokeThickness" Value="2" /> 
          </Trigger> 
         </Style.Triggers> 
        </Style> 
       </Path.Style> 
      </Path> 
     </ControlTemplate> 
    </Button.Template> 
</Button> 

が、+形状の右下の部分、ButtonBase_OnClick(およびICommandをその問題のために)トリガーされません。

Image for clarification

Iは、最終的に、私はControlTemplateに負の値を必要とする理由である特定の位置を中心CanvasButtonを使用する予定。

どうすればButtonBase_OnClickがのControlTemplateに同じ状態を維持しながらトリガーすることができますか?

編集:
WPF. Is it possible to do ellipse “rectangle bounds” hittest?で説明したように私は私のControlTemplatePath周りGridを配置しようとしたが、それはButtonClickイベントをトリガしていないようです。

+0

内の[WPFの可能性の重複をあなたのパスを置きます。楕円 "矩形境界"の打撃を行うことは可能ですか?](https://stackoverflow.com/questions/39703613/wpf-is-it-possible-to-do-ellipse-rectangle-bounds-hittest) – Mat

+0

@Mat問題はヒットテストではなく、ヒットテストボックスが誤って配置されているか、位置がずれているため、「グリッド」をクリックするとクリックがボタンにルーティングされません。 – ManIkWeet

答えて

0

は、ビューボックス

<Viewbox Width="50" Height="50"> 
    <Path here...> 
</Viewbox> 
+0

私は理解していません_それは動作しますが、動作します。私は「幅」と「高さ」を「60」に変更しなければなりませんでした。私は '120'(' Path'シェイプの幅と高さの合計)ではない理由を理解していませんが、それは細部です。 – ManIkWeet

+0

もう少し混乱すると、 'Viewbox'を' Canvas'に置き換えることで、特定の幅と高さを合わせる必要がなくなります。 – ManIkWeet

+0

ええ。また、データを に設定するようにしてください。負のパスデータ値ではなく、負のマージン値をButtonで再生します。あなたはもっとそれが好きかもしれません。それが動作する場合(あなたはビューボックス/キャンバスは必要ありません) – Milan

関連する問題