2015-12-02 15 views
15

私は、テキストボックスコントロールを持つWPFウィンドウを持っています。コントロールには、テキストボックスにkeyboardfocusがあるときに表示されるadornerがあります。WPFアドナーレイヤー外部ウィンドウ

下のスクリーンショットからわかるように、adornerはウィンドウの境界に制限されています。どのようにして完全な入札者が表示されるようにすることができますか?

enter image description here

Adornerテンプレートです:

<DataTemplate x:Key="ContextualInfoDataTemplate"> 
    <Border 
     Background="#E1E1E1" 
     CornerRadius="6" 
     Margin="50,36,0,0"> 
     <Border.Effect> 
      <DropShadowEffect/> 
     </Border.Effect> 
     <Grid Width="200" Margin="4,3,4,4"> 
      <TextBlock TextWrapping="Wrap" Text="OverridenAutomationId"/> 
     </Grid> 
    </Border> 
</DataTemplate> 

答えて

4

それは不可能です。 AdornerLayerAdornerDecoratorの境界に限定されています(定義していなければWindowには1つしかありません)。そのため、そのデコレータの範囲外に行くことはできません。

PopupMSDN)を使用すると、ポップアップウィンドウを定義しても、アドラーを使用していないことがわかります。主な違いは、ポップアップがウィンドウのビジュアルツリーの一部ではないため、ウィンドウのビジュアルツリーに沿って移動またはサイズ変更されないことです。

デスクトップ上にエフェクトを表示する場合(表示するドロップシャドウのような)、独自のポップアップウィンドウを定義することもできます。それは本当に扱いにくいですが、実行可能です。たくさんの仕事をすると、あなたのウィンドウに合わせて移動したりサイズを変更したりすることができます(つまり、「ウィンドウの外れ」をエミュレートします)。しかし、これは間違いなく速く簡単にコード化することはできません(通常の場合はPopupあなたのWindowSizeChangedLocationChangedイベントをフックしてそれに応じて移動してください)

+0

ありがとうございます。私はこれが事実かもしれないと思われるようになっていた。以前の試みではポップアップを使用しようとしましたが、アドラーレイヤーのアプローチについて私が気に入ったのは、コントロール/ウィンドウで動いたことでした。 –

+1

ウィンドウの 'SizeChanged' /' LocationChanged'イベントをフックすることができます(実際のテキストボックスはうまく動かないことを考えれば!)、それに応じて 'Popup'を動かしてください。それはすべて難しいはずはありません! :-) – Jcl

+1

このlibのPopupExを見てください。それは、移動/サイジングに関する問題を解決します。 https://github.com/ControlzEx/ControlzEx –

関連する問題