2011-10-20 70 views
13

オーバレイとして使用されるカスタムコントロールを作成したいと思います。コントロールには2つの子コントロールが含まれている必要があります。子コントロールは描画する必要があり、いつものようにクリック可能でなければなりません。しかし、コントロール内の他のすべては、透明で「クリック可能」でなければなりません。WPF:透明なキャンバスとクリック可能な子でオーバーレイコントロールを作成する方法

これを達成する方法は次のとおりです。まず、オーバーレイが配置されるウィンドウでPreviewMouseDown \ Up \ Moveイベントを使用しています。私は、これらのイベントを私のカスタムコントロールの透明な部分を "通過"したいが、透明ではない(例えば私のボタンで)停止する。

<Canvas Background="transparent" IsHitTestVisible="true"> 
    <Button Canvas.Left="384" Canvas.Top="34" Content="Button" Height="23" Name="button1" Width="75" Click="button1_Click" IsHitTestVisible="True" /> 
    <TextBlock Canvas.Left="27" Canvas.Top="105" Height="36" Name="textBlock1" Text="TextBlock" Width="432" FontSize="24" IsHitTestVisible="False" Foreground="Red" FontWeight="Bold" /> 
</Canvas> 

私はfalseにキャンバスIsHitTestVisibleを設定した場合、ボタンを含む全体の制御は 『unhittable』となりしかし:第二に、ここで私の制御のためのXAMLは、(ルートユーザーコントロールのノードが放置された)です。 trueに設定すると、すべてのトンネリングイベントがカスタムコントロールで停止し、ボタンがクリック不可になります。

この種の動作を達成する正しい方法は何ですか? キャンバス(または他のパネル)をサブクラス化せずに行うことはできますか?

答えて

18

Canvasの背景をnullに設定するか、背景を設定しないでください(デフォルトはnullです)。 Transparentは、マウスのクリックに対して「可視」です。

+0

うわー!それはとても簡単でした!ありがとう:) –

+0

@Pavel:あなたは大歓迎です:) – Vlad

+0

@Vlad、こんにちは、もう一度あなたに会いに!バックグラウンドがnullの場合、内部のボタンはクリックできませんが、バックグラウンドが透明な場合はボタンをクリックすることができるように機能しますか? ///ところで、以前の助けてくれてありがとう。 TextHighlightBlockコントロール(黄色/オレンジのハイライトカラー)を意味します。あなたは私がそれを速くするのを手伝った。私の会社の多くの人は、仕事がうまくやっていたと私に言った、そしてこのコンロールはそれの重要な部分でした。 –

関連する問題