2015-12-02 7 views
15

Ho una finestra WPF con un controllo casella di testo. Il controllo ha una decorazione che viene resa visibile quando la casella di testo ha tastierafocus.WPF Adorner Layer Outside Window

Come si può vedere nello screenshot qui sotto, l'adorner è limitato ai limiti della finestra. Come posso fare in modo che venga visualizzato l'adorner completo?

enter image description here

modello 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> 

risposta

4

Non è possibile. Lo AdornerLayer confina con uno AdornerDecorator (lo Window ne ha uno se non ne è stato definito uno), quindi non è possibile uscire dai confini di quel decoratore.

È possibile ottenere ciò che si desidera utilizzando uno Popup (MSDN) che definisce una finestra popup, ma sicuramente non utilizza un adorner. La differenza principale è che il popup non fa parte dell'albero visivo della finestra, quindi non verrà spostato o ridimensionato con esso.

Si potrebbe anche definire la propria finestra popup se si desidera che gli effetti vadano sul desktop (come l'ombra esterna che si sta visualizzando). Sarebbe davvero difficile, ma fattibile. Con un sacco di lavoro, potresti farlo spostare e ridimensionare insieme alla tua finestra (emulando così un "out of window adorner"), ma questo non sarà sicuramente veloce o facile da codificare (per un normale Popup però, potresti basta agganciare gli eventi e LocationChanged e spostarsi di conseguenza)

+0

Grazie per questo. Stavo iniziando a sospettare che potesse essere così. In un precedente tentativo avevo provato a utilizzare il Popup, tuttavia ciò che mi piaceva dell'approccio del layer di adorner era che si muoveva con il controllo/finestra. –

+1

Si potrebbero agganciare gli eventi 'SizeChanged' /' LocationChanged' della finestra (considerando che la casella di testo effettiva si spera non si muova!) E spostare il 'Popup' di conseguenza. Non dovrebbe essere così difficile! :-) – Jcl

+1

Dai un'occhiata a PopupEx in questa libreria. Risolve problemi riguardanti lo spostamento/ridimensionamento. https://github.com/ControlzEx/ControlzEx –