2017-01-20 18 views
0

この楕円をスタイルのControlTemplateに適用したとします。今、すぐにマウスがこの要素がマウスで撮影します。この楕円に接触するようヒットテスト領域を変更する

<Ellipse x:Name="Ellipse" 
     Fill="#C0FFFFFF" 
     Stroke="{StaticResource SpecialColor}" 
     StrokeThickness="2"/> 

を(例えば:これは、スライダーのサムのに使用されます)。衝突ジオメトリを変更するにはどうすればよいですか?これを行うためのXAMLのみの方法はありますか?

私は、マウスが楕円の中央にあるときにそれをキャプチャするので、衝突領域を小さくしたいとしましょう。

また、マウスを楕円に近づけると楕円のサイズよりも大きくなるようにしたいかもしれません。

+1

最も簡単な方法(XAMLのみ)は、「Fill = "Transparent"」という楕円を少し大きく(または小さく)配置することです。 Transparent(nullとは対照的に)は、ヒットテストの回数をカウントします。 –

+0

ダミーの楕円を大きく透明にするのは良い意見です。楕円はもっと小さいのはどうでしょうか?私が外側の楕円をいくつかのブラシで塗りつぶした場合、ヒットテストの対象となるでしょう –

+1

Ernoが彼の答えで指摘したように、透明な楕円上でマウスイベントを処理する必要があります。現在の楕円をデコレータ、透明な楕円を「実際」のものと考えてください。 –

答えて

2

これらのソリューションでは、楕円のヒットテストは変更されませんが、可能な限りXAMLソリューションが提供されます。

楕円をコンテナにラップし(Grid?)、コンテナに透明な背景を割り当てることで、より大きなものにすることができます。

<Grid Background="Transparent"> 
    <Ellipse Margin="5" ... /> 
</Grid> 

はそれが小さい(楕円のIsHitTestVisible =「false」を

<Grid> 
    <Ellipse IsHitTestVisible="False" ... /> 
    <Grid Background="Transparent" Width="5" Height="5" /> 
</Grid> 

重要なのヒットテストを透明な背景で再び、上部に小さなジオメトリを追加し、無効にすることで行うことができます作りますあなたが明示的に透明に背景を設定する必要があります。

  • 両方のソリューションは、楕円BUのヒットテストを変更しない
    • デコイを使用すると、デコイのクリックなどを処理するイベントを実装し、コンテナに作用させる必要があります。
  • 関連する問題