Как рассчитать общую высоту текстовых полей, текст которых назначен в главном окне Функция приложения WPF - PullRequest
0 голосов
/ 12 сентября 2018

В моем приложении есть десять дочерних по отношению к панели Stack текстовых полей. Я назначил текст для текстовых полей в функции Главного окна скрипта c #. Я хочу рассчитать общую высоту текстовых полей.

Проблема в том, что он дает 0. Пожалуйста, посмотрите на код ниже:

List<TextInfoData> newList = new List<TextInfoData>();

public MainWindow()
{
    InitializeComponent();

    for (int num = 0; num < 10; num++)
    {
        newList.Add(new TextInfoData("Sunset is the time of day when our sky meets the " +
            "outer space solar winds. There are blue, pink, and purple swirls, spinning " +
            "and twisting, like clouds of balloons caught in a blender.", 1));
    }

    RearrangeTextData(newList);
}

private void RearrageTextData(List<TextInfoData> textInfoData)
{

    TextBox tbox = new TextBox();
    //rest of code to define textbox margin and setting textwrapping to wrap

    double totalTextBoxHeight = 0;

    foreach (TextInfoData tinfoData in textInfoData)
    {
        tbox.Text = tinfoData.GetTextDataString();
        totalTextBoxHeight += tbox.ActualHeight;
        rootStackPanel.Children.Add(tbox);
    }

    MessageBox.Show("Total Height: " + totalTextBoxHeight);
}

У меня есть класс TextInfoData, который принимает строковые и целые два значения в качестве параметра. Есть функция GetTextDataString, которая возвращает строковое значение.

Имя родительской панели стека - rootStackPanel.

Если я проверяю общее число дочерних элементов rootStackPanel, он показывает десять (что правильно), но когда я пытаюсь получить общую высоту текстового поля, он дает 0. Пожалуйста, наставьте меня.

1 Ответ

0 голосов
/ 12 сентября 2018

Проверьте это сообщение: Определите высоту текстового блока WPF

Расчет может быть таким:

private double GetHeight()
{
   double height = 0;
   foreach (var item in rootStackPanel.Children as IEnumerable)
   {
      if (item is TextBox tb)
      {
         tb.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
         height += tb.DesiredSize.Height;
      }
   }
   return height;
}

Надеюсь, что поможет.

На самом делеЯ нашел еще один пост здесь .

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