我有一个Form(winform)
,它包含Elementhost
. 在运行时,我将我的 WPF 用户控件托管到这个elementhost
. 我用过AutoSize = True
elementhost。
Elementhost
根据 WPF 用户控件大小调整自身大小。但是如何根据我的 ElementHost 的大小调整我的表单大小。
谢谢,
我有一个Form(winform)
,它包含Elementhost
. 在运行时,我将我的 WPF 用户控件托管到这个elementhost
. 我用过AutoSize = True
elementhost。
Elementhost
根据 WPF 用户控件大小调整自身大小。但是如何根据我的 ElementHost 的大小调整我的表单大小。
谢谢,
这是答案:
将 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 大小转换为物理像素?
现在我从新大小设置客户端大小。
抱歉,但是否可以订阅大小更改并更新主机表单?
我有一个解决方案,但不确定输出。它在 WPF 桌面应用程序中工作。您需要做的是将高度和宽度设置为 NAN(不是数字)
this.Width = double.NaN;
this.Height = double.NaN;
而不是设置自动大小设置:
this.elementHost1.Dock = System.Windows.Forms.DockStyle.Fill;
这是一个老问题,但我经常来,所以它仍然相关,所以这是我的解决方案:
我要做的是:
一种。当我希望 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;