【问题标题】:Resize Form based on ElementHost size根据 ElementHost 大小调整表单大小
【发布时间】:2012-07-20 06:03:17
【问题描述】:

我有一个Form(winform),它包含Elementhost。在运行时,我将我的 WPF 用户控件托管到此 elementhost。我已将AutoSize = True 用于元素主机。

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

谢谢,

【问题讨论】:

    标签: wpf winforms elementhost


    【解决方案1】:

    答案如下:

    将 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?

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

    【讨论】:

      【解决方案2】:

      抱歉,难道不能订阅size changes 并更新主机表单吗?

      【讨论】:

      • 您好,感谢您的回复。我也这样做了。我已经覆盖了 Size MeasureOverride(Size constraint),并且我还在这个方法中触发了一个事件。我的主机表单订阅了此事件并获得通知并更新表单。但我认为这是一个修复而不是解决方案。你说什么?
      • @341184 你能给一些代码看看吗?就目前而言,我没有看到更漂亮的解决方案。
      • 终于我得到了答案,我也发布了同样的答案。原方法贴在这里:stackoverflow.com/questions/3286175/…
      【解决方案3】:

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

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

      【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

        我做的是:

        一个。当我希望 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 最小尺寸以具有滚动条。

        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;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多