这是我的XAML

<Grid
    Name="grid">
    <TextBlock
        Text="Some Label" />
    <WindowsFormsHost
        Name="winFormsHost">

    </WindowsFormsHost>
</Grid>


在表单的负载上,我执行以下方法

protected void OnLoad(object sender, RoutedEventArgs e)
{
    // Create a line on the fly
    Line line = new Line();

    line.Stroke = Brushes.Red;
    line.StrokeThickness = 17;

    line.X1 = 50;
    line.Y1 = 50;

    line.X2 = 250;
    line.Y2 = 50;

    this.grid.Children.Add(line);

    System.Windows.Forms.TextBox oldSchoolTextbox = new System.Windows.Forms.TextBox();
    oldSchoolTextbox.Text = "A bunch of Random Text will follow.  ";
    oldSchoolTextbox.WordWrap = true;
    oldSchoolTextbox.Width = 300;

    for (int i = 0; i < 250; i++)
    {
        oldSchoolTextbox.Text += "abc ";

        if (i % 10 == 0)
        {
            oldSchoolTextbox.Text += Environment.NewLine;
        }
    }

    this.winFormsHost.Child = oldSchoolTextbox;
}


仅当我注释掉以下行时,才绘制该行。

this.winFormsHost.Child = oldSchoolTextbox;


如何在WindowsFormsHost控件上画一条线?

最佳答案

微软有一种叫做“空域”的东西,至少可以很容易地阻止这种情况的发生。这是WPF Interop page describing airspace。 [它具有DX焦点,但正如所指出的,同样的情况适用于WindowsFormsHost。

WindowsFormsHost(如果有子级)将创建一个单独的HWND,以防止WPF呈现上下文显示在该矩形中。

解决此问题的最佳选择需要.NET 3.5sp1(至少要可靠地工作)。您可以通过创建一个完全独立的100%透明背景窗口并将其放置在Windows窗体宿主控件上来解决此问题。然后,您可以画图,它会正确显示。

有点古怪的感觉,但是可以。

10-08 12:34