在winforms项目中使用wpf usercontrol时的可见性和高度问题

时间:2011-11-24 11:18:37

标签: c# wpf winforms height

在以下情况下,我遇到两个相关问题。

我有一个包含一些面板的winforms窗口。在这些面板中的一些面板中有许多(自定义)wpf用户控件。

1

如果我检查.host上的.Visible,它总是返回true。即使我可以看到它不可见。

2

如果我检查.Height它总是给我相同的大小。即使控件本身显示了可变数量的事物并且相应地改变了大小(通过Visibility.collaps);

如何获得正确的值?

编辑:已添加代码

Okey现在,我正在疯狂。 如果我在我的代码中添加一些消息框,以检查上述代码何时以及以何种顺序执行。当我这样做时一切正常!但是一旦我删除了消息框,它就会反转效果。而不是在需要时变大,反之亦然.... wtf wpf!

private Size bereken_panel(Panel P)
    {
        Size Sz = new Size();
        int tmp_H = 42;
        foreach (Control SC in P.Controls)
        {
            if (SC is SplitContainer)
            {
                if (SC.Visible)
                {
                    tmp_H += SC.Height;
                }
            }
            else if (SC is System.Windows.Forms.Integration.ElementHost)
            {
                if ((SC as System.Windows.Forms.Integration.ElementHost).Child.Visibility == System.Windows.Visibility.Visible)
                {
                    tmp_H += (int)(SC as System.Windows.Forms.Integration.ElementHost).Child.RenderSize.Height;
                }
            }
        }
       // tmp_H = 42 + n_showed * 25;
        if (tmp_H < 65)
        {
            tmp_H = 65;
        }
        Sz.Height = tmp_H;
        Sz.Width = 432;
        return Sz;
    }

所以这是经过一些额外的修改 澄清TopLeft点的位置。

 int p_x_links = panel1.Width / 2 - 436;
        int p_x_rechts = panel1.Width / 2 + 4;
        //links
        p_contact_gegevens.Size = bereken_panel(p_contact_gegevens);
        p_telnrs.Location = new Point(p_x_links, p_contact_gegevens.Size.Height + p_contact_gegevens.Location.Y + 8);
        p_telnrs.Size = bereken_panel(p_telnrs);
        p_bezoekadres.Location = new Point(p_x_links, p_telnrs.Size.Height + p_telnrs.Location.Y + 8);
        p_bezoekadres.Size = bereken_panel(p_bezoekadres);
        //rechts
        p_administratie.Size = bereken_panel(p_administratie);
        p_postadres.Location = new Point(p_x_rechts, p_administratie.Size.Height + p_administratie.Location.Y + 8);
        p_postadres.Size = bereken_panel(p_postadres);

1 个答案:

答案 0 :(得分:0)

  1. 最可能的是控件与其他控件重叠。在这种情况下,可见性属性甚至可以为True。
  2. 请尝试使用ActualWidth
  3. 修改

    很抱歉,该示例位于ActualWidth,但您要求的是Height。概念与btw相同。