У меня есть две проблемы, возникающие в следующей ситуации.
У меня есть окно winforms, которое содержит несколько панелей. В некоторых из этих панелей есть несколько (пользовательских) пользовательских элементов управления wpf.
1
если я проверяю. Visible на elementhost, он всегда возвращает true. хотя я вижу, что его не видно.
2
если я проверю. Высота всегда будет иметь одинаковый размер. даже если сам элемент управления показывает переменное количество вещей и соответственно меняет размер (через Visibility.collaps);
как мне получить правильные значения?
редактировать: код добавлен
Ладно, теперь я официально схожу с ума.
Если я добавлю несколько ящиков сообщений в свой код, чтобы проверить, когда и в каком порядке выполняется вышеуказанный код. Когда я делаю это все работает! но как только я удаляю почтовые ящики, эффект отменяется. Вместо того, чтобы увеличиваться при необходимости, он становится меньше, и наоборот ....
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);