2

カスタム画像を配置するために、WPF テキストボックスを拡張しています。この画像でマウスのクリックをキャプチャしたい。これまでのところ、arrangeOverride を使用して画像を必要な場所に配置することができましたが、たまたまテキスト ボックスの「内側」に配置されているため、クリックしようとするたびにテキスト ボックスがクリックと添付されているイベントをキャプチャします。画像は発火しません。アレンジ オーバーライドを使用するときに、画像をテキスト ボックスの上に配置するように指定することはできますか? コントロールを拡張してその中にテキスト ボックスを配置すれば、この問題を回避できることはわかっていますが、私のアプリケーションでは、現在使用している別のより複雑なコントロールで使用できるようにするために、実際にテキスト ボックスを拡張する必要があります。テキストボックス。

ありがとう!

4

2 に答える 2

1

ArrangeOverride は、これに対する理想的なソリューションではない場合があります。より良いアプローチは、おそらくコントロール テンプレートを使用することです。1 つのセルを含む Grid を含む ControlTemplate を作成し、Image とテキスト ボックスのコンテンツ ホストをその 1 つのセルに配置します。コントロールを配置する順序によって暗黙的に、または Panel.ZIndex 添付プロパティを設定することによって明示的に Image を一番上に配置できます。

ここでの 1 つの秘訣は、テキスト ボックスのコンテンツ ホストを表す方法を知ることです。これは、PART_ContentHost という名前の ScrollViewer でなければなりません。したがって、テンプレートは次のようになります。

<ControlTemplate TargetType="{x:Type Ambog36sTextBox}">
  <Grid>
    <ScrollViewer x:Name="PART_ContentHost" />  <!-- WPF will fill in a text edit area here -->
    <Image Panel.ZIndex="1" Source="..." />
  </Grid>
</ControlTemplate>

次に、通常の方法でデフォルト スタイルを介して、このテンプレートをカスタム テキスト ボックス クラスに割り当てます。

于 2010-02-10T02:33:32.030 に答える
0

標準の合成モデルを使用していないため、テキスト ボックス コードに到達する前にマウス処理をオーバーライドし、生成するイベントを決定する独自のカスタム ロジックを追加する必要があります。

于 2010-02-10T02:20:03.943 に答える