2015-12-02 17 views
15

Tôi có một cửa sổ WPF với một điều khiển hộp văn bản. Bộ điều khiển có một đường viền được hiển thị khi hộp văn bản có tính năng lấy nét bàn phím.WPF Adorner Layer Outside Window

Như bạn có thể thấy trong ảnh chụp màn hình bên dưới, đường viền được giới hạn trong giới hạn của cửa sổ. Làm thế nào tôi có thể làm cho nó để các adorner đầy đủ được hiển thị?

enter image description here

adorner mẫu là:

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

Trả lời

4

Đó là điều không thể. Các AdornerLayer hạn chế đến giới hạn của một AdornerDecorator (Window có một nếu bạn đã không xác định một), vì vậy nó chỉ có thể không đi ra ngoài giới hạn của trang trí đó.

Bạn có thể nhận được những gì bạn muốn bằng cách sử dụng Popup (MSDN) xác định cửa sổ bật lên, nhưng chắc chắn không sử dụng đường viền. Sự khác biệt chính là cửa sổ bật lên không phải là một phần của cây thị giác của cửa sổ, vì vậy nó sẽ không di chuyển hoặc thay đổi kích thước cùng với nó.

Bạn cũng có thể xác định cửa sổ bật lên của riêng mình nếu bạn muốn các hiệu ứng đi qua màn hình nền (như bóng thả bạn đang hiển thị). Điều đó thực sự phức tạp, nhưng có thể thực hiện được. Với rất nhiều công việc, bạn có thể làm cho nó di chuyển và thay đổi kích thước cùng với cửa sổ của bạn quá (do đó mô phỏng một "ra khỏi cửa sổ adorner"), nhưng điều đó chắc chắn sẽ không được nhanh chóng hoặc dễ dàng để mã (cho một bình thường Popup mặc dù, bạn có thể chỉ cần móc vào các sự kiện Window 's SizeChangedLocationChanged sự kiện và di chuyển tương ứng)

+0

Cảm ơn vì điều này. Tôi đã bắt đầu nghi ngờ đây có thể là trường hợp. Trong một nỗ lực trước đó tôi đã thử bằng cách sử dụng Popup, tuy nhiên những gì tôi thích về cách tiếp cận lớp adorner là nó đã di chuyển với kiểm soát/cửa sổ. –

+1

Bạn có thể móc các sự kiện 'SizeChanged' /' LocationChanged' của cửa sổ (xem xét hộp văn bản thực tế hy vọng là không di chuyển!) Và di chuyển 'Popup' cho phù hợp. Đó không phải là tất cả những khó khăn! :-) – Jcl

+1

Hãy xem PopupEx trong lib này. Nó giải quyết các vấn đề liên quan đến việc di chuyển/định cỡ. https://github.com/ControlzEx/ControlzEx –

Các vấn đề liên quan