3

我有一个Form(winform),它包含Elementhost. 在运行时,我将我的 WPF 用户控件托管到这个elementhost. 我用过AutoSize = Trueelementhost。

Elementhost根据 WPF 用户控件大小调整自身大小。但是如何根据我的 ElementHost 的大小调整我的表单大小。

谢谢,

4

5 回答 5

2

这是答案:

将 ElementHost.Child 设置为 WPF 用户控件后。我将遵循以下功能:

public System.Windows.Size GetElementPixelSize(UIElement element) 
    { 
        Matrix transformToDevice; 
        var source = PresentationSource.FromVisual(element);
        if (source != null)
            transformToDevice = source.CompositionTarget.TransformToDevice;
        else     
            using (var Hwndsource = new HwndSource(new HwndSourceParameters()))
                transformToDevice = Hwndsource.CompositionTarget.TransformToDevice;


        if (element.DesiredSize == new System.Windows.Size()) 
            element.Measure(new System.Windows.Size(double.PositiveInfinity, double.PositiveInfinity)); 

        return (System.Windows.Size)transformToDevice.Transform((Vector)element.DesiredSize); 
    } 

原始方法发布于:如何将 WPF 大小转换为物理像素?

现在我从新大小设置客户端大小。

于 2012-07-20T09:45:01.333 回答
0

抱歉,但是否可以订阅大小更改并更新主机表单?

于 2012-07-20T07:00:21.670 回答
0

我有一个解决方案,但不确定输出。它在 WPF 桌面应用程序中工作。您需要做的是将高度和宽度设置为 NAN(不是数字)

this.Width = double.NaN;
this.Height = double.NaN;
于 2012-07-20T07:30:22.173 回答
0

而不是设置自动大小设置:

 this.elementHost1.Dock = System.Windows.Forms.DockStyle.Fill;
于 2017-11-21T19:27:35.623 回答
0

这是一个老问题,但我经常来,所以它仍然相关,所以这是我的解决方案:

我要做的是:

一种。当我希望 WPF 视图匹配(停靠)窗口大小时:

ElementHost eh = new ElementHost();
eh.Dock = System.Windows.Forms.DockStyle.Dock;
eh.AutoSize = true;
eh.Child = wpfView;
eh.CreateControl();
this.Controls.Add(eh);
this.AutoSize = false;

注意:如果表格太小,您可以设置 eh min size 以具有滚动条。

b:当我希望主机表单匹配 WPF 视图时:

ElementHost eh = new ElementHost();
eh.Dock = System.Windows.Forms.DockStyle.None;
eh.AutoSize = true;
eh.Child = wpfView;
eh.CreateControl();
this.Controls.Add(eh);
this.AutoSize = true;
this.AutoSizeMode=AutoSizeMode.GrowAndShrink;
于 2021-07-05T10:32:32.500 回答