Выровнять текст в TableColumn / Paragraph - PullRequest
1 голос
/ 19 января 2011

Возможно ли вертикальное выравнивание текста в TableColumn по середине?

Я добавляю абзац в ячейку таблицы таблицы.И эту таблицу я добавляю в элемент управления richTexBox.Проблема в том, что средний столбец состоит из изображений (смайликов) и он «выровнен по вертикальному центру».

Мне сложно описать это.

Вот изображение:

alt text

Я бы хотел выровнять первый и третий столбцы по вертикали по центру.Я хочу, чтобы текст в этих 3 столбцах находился на одном и том же уровне:.

Функцию, которая создает таблицу с этими 3 столбцами, можно найти здесь:

    public Table ConvertToTabRp(IRp rp, string avatarNick)
    {
        var tempRp = new Rp { RpText = rp.RpText, Nick = rp.Nick, Time = rp.Time, Your = rp.Your };

        if (tempRp.Your)
            tempRp.Nick = avatarNick;

        string time = string.Format(CultureInfo.CurrentCulture, "{0}", DateTime.ParseExact(tempRp.Time, "yyyy-MM-dd HH:mm:ss", null)
            .ToString("dd-MM-yyyy HH:mm:ss").Replace("-", "."));

        var tab = new Table {Margin = new Thickness(0, 0, 0, 0)};

        var gridLenghtConvertor = new GridLengthConverter();

        //1. col
        tab.Columns.Add(new TableColumn { Name = "colNick", Width = (GridLength)gridLenghtConvertor.ConvertFromString("100") });
        //2.col
        tab.Columns.Add(new TableColumn { Name = "colMsg", Width = (GridLength)gridLenghtConvertor.ConvertFromString("Auto") });
        //3.col
        tab.Columns.Add(new TableColumn { Name = "colDt", Width = (GridLength)gridLenghtConvertor.ConvertFromString("150") });

        tab.RowGroups.Add(new TableRowGroup());
        tab.RowGroups[0].Rows.Add(new TableRow());

        var tabRow = tab.RowGroups[0].Rows[0];

        //1.col - NICK
        var pNick = new Paragraph(new LineBreak()) { TextAlignment = TextAlignment.Left };
        pNick.Inlines.Add(new Run(tempRp.Nick));

        if (!tempRp.Your)
        {
            pNick.Foreground = Brushes.DodgerBlue;
        }
        tabRow.Cells.Add(new TableCell(pNick));

        //2.col - MESSAGE
        tabRow.Cells.Add(new TableCell(ConvertToRpWithEmoticons(tempRp.RpText)) { TextAlignment = TextAlignment.Left});

        //3.col  - DATE TIME
        var pTime = new Paragraph(new LineBreak()) { TextAlignment = TextAlignment.Right };
        pTime.Inlines.Add(time);
        tabRow.Cells.Add(new TableCell(pTime));

        return tab;

    }

может быть решение может быть:

        var pNick = new Paragraph(new LineBreak()) { TextAlignment = TextAlignment.Left , **VerticalTextAligment = Center** };

Я не знаю, как выровнять по вертикали в абзаце.

РЕДАКТИРОВАТЬ:

Может быть, проблема в том, как добавить изображение в абзац, вот его код:

            var image = new Image
            {
                Source = new BitmapImage(new Uri(path, UriKind.RelativeOrAbsolute)),
                Width = 20,
                Height = 20,
            };
            para.Inlines.Add(new Run(separatemsg.Text) { BaselineAlignment = BaselineAlignment.TextBottom });
            //insert smile
            para.Inlines.Add(new InlineUIContainer(image) {BaselineAlignment = BaselineAlignment.Bottom});

и этот абзац добавляется в 2. столбец.

1 Ответ

0 голосов
/ 19 января 2011

Попробуйте использовать свойство BaselineAlignment .
Используйте Run -Inline, чтобы поместить текст в абзацы и установить свойство BaselineAlignment.

Вы можете использовать это также для изображения. Используйте для этого свойство BaselineAlignment InlineUIContainer

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