Проблемы с видимостью и высотой при использовании wpf usercontrol в проекте winforms - PullRequest
1 голос
/ 24 ноября 2011

У меня есть две проблемы, возникающие в следующей ситуации.

У меня есть окно 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);

1 Ответ

0 голосов
/ 24 ноября 2011
  1. Скорее всего, элемент управления перекрывается другим элементом управления.Свойство видимости в этом случае может быть даже True.
  2. Попробуйте вместо этого использовать ActualWidth .

EDIT

Извините, пример включен ActualWidthно вы просите Height.Концепция та же, кстати.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...