2016-11-26 7 views
1

В моем приложении WPF я добавил WindowsFormsHost в одну сетку, я хочу нарисовать прямоугольник на элементе управления внутри WinFormsHost.Невозможно нарисовать прямоугольник на WindowsFormsHost с помощью Adorners в WPF

расположение

Применение:

Application Layout Image

Код Пытаюсь:

Adorner Класс

public class SimpleRectAdorner : Adorner 
    { 
     // Be sure to call the base class constructor. 
     public SimpleRectAdorner(UIElement adornedElement) 
      : base(adornedElement) 
     { 
     } 

     // A common way to implement an adorner's rendering behavior is to override the OnRender 
     // method, which is called by the layout system as part of a rendering pass. 
     protected override void OnRender(DrawingContext drawingContext) 
     { 
      Rect adornedElementRect = new Rect(this.AdornedElement.DesiredSize); 

      // Some arbitrary drawing implements. 
      SolidColorBrush renderBrush = new SolidColorBrush(Colors.Green); 
      renderBrush.Opacity = 0.2; 
      Pen renderPen = new Pen(new SolidColorBrush(Colors.Navy), 1.5); 

      // Draw a circle at each corner. 
      Rect rect = new Rect(new Point(adornedElementRect.TopLeft.X, adornedElementRect.TopLeft.Y + 50), new Size(150, 50)); 
      drawingContext.DrawRectangle(renderBrush, renderPen, rect); 
     } 
    } 

Код для добавления Adorner

private void btnDraw_Click(object sender, RoutedEventArgs e) 
     { 
      AdornerLayer.GetAdornerLayer(viewerGrid.Children[0]).Add(new SimpleRectAdorner(viewerGrid.Children[0])); 
     } 

Есть ли какой-либо возможный способ нарисовать прямоугольник на элементе управления, который находится внутри WindowsFormsHost?

Заранее спасибо.

+1

См. Здесь: http://stackoverflow.com/q/9920480/1136211 – Clemens

ответ

0

Как отмечено в комментарии Клеменса, WindowsFormsHost визуализируется отдельно от остальной части вашего окна и, по необходимости, отображается поверх окна. На первый взгляд это кажется ограниченным дизайном, о котором вы ничего не можете сделать; однако это не совсем верно.

Если второй слой добавлен поверх вашего первого слоя, просто добавьте третий слой поверх второго. Другое окно или всплывающее окно может отображать верхнюю часть вашего WindowsFormsHost, и в то время как вам придется перепрыгивать через некоторые обручи, чтобы все это выглядело как часть одного окна - гарантируя, что все перемещается, сводит к минимуму и восстанавливается одновременно, и т. д. - это, безусловно, возможно.

Вы можете использовать прозрачность в своем третьем слое, чтобы разрешить доступ к содержимому в WindowsFormsHost и получить доступ. Например, вы можете установить AllowsTransparency значение true в вашем всплывающем окне WPF. Это будет немного дополнительной работой, но если вам абсолютно нужна эта функция, вы можете это сделать.