根据ElementHost大小调整表单大小

时间:2012-07-20 06:03:18

标签: wpf winforms elementhost

我有Form(winform),其中包含Elementhost。在运行时,我将WPF Usercontrols托管到此elementhost。我已将AutoSize = True用于elementhost。

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

谢谢,

5 个答案:

答案 0 :(得分: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); 
    } 

原始方法发布于:How do I convert a WPF size to physical pixels?

现在我从新的尺寸设置客户端尺寸。

答案 1 :(得分:0)

sory,但是无法订阅size changes并更新主机表单吗?

答案 2 :(得分:0)

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

this.Width = double.NaN;
this.Height = double.NaN;

答案 3 :(得分:0)

而不是设置自动调整大小集:

 this.elementHost1.Dock = System.Windows.Forms.DockStyle.Fill;

答案 4 :(得分: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;