在winforms项目中使用wpf用户控件时的可见性和高度问题
本文关键字:可见性 问题 高度 控件 用户 项目 winforms wpf | 更新日期: 2023-09-27 18:15:41
我有两个相关的问题,它们发生在以下情况:
我有一个包含一些面板的winforms窗口。在这些面板中有一些(自定义)wpf用户控件。
<标题> 1如果我在元素主机上检查. visible,它总是返回true。即使我能看到它是不可见的
<标题> 2 h1> 果我检查。height,它总是会给我相同的大小。即使控件本身显示可变数量的内容并相应地改变大小(通过visibility . collapse);我怎样才能得到正确的值?
edit: code added
好吧,现在我真的要疯了。如果我在代码中添加一些消息框来检查上述代码何时以何种顺序执行。当我这样做的时候,一切都工作了!但一旦我删除了消息框,效果就会逆转。而不是在需要的时候变大,它会变小,反之亦然....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);
标题>标题>
- 很可能该控件与其他控件重叠。可见属性在这种情况下甚至可以是True。
- 尝试使用ActualWidth代替
编辑
对不起,这个例子是关于ActualWidth
的,但是你要的是Height
。概念是一样的。