我有Form(winform)
,其中包含Elementhost
。在运行时,我将WPF Usercontrols托管到此elementhost
。我已将AutoSize = True
用于elementhost。
Elementhost
根据WPF Usercontrol大小调整自身大小。但是如何根据我的ElementHost大小调整表单大小。
谢谢,
答案 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;