TreeView: Pango. Выравнивание не работает - PullRequest
1 голос
/ 11 марта 2012

И еще одна проблема TreeView , следовало бы использовать qt;)

У меня есть TreeView, в котором я использую следующую функцию для визуализации текста:

private void RenderEntryValue (Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel model, Gtk.TreeIter iter)
{
      (cell as Gtk.CellRendererText).Markup = "" + someMarkupText;
      (cell as Gtk.CellRendererText).Alignment = Pango.Alignment.Center;
}

Как вы уже догадались из Субъекта, это не работает. Текст остается выровненным по левому краю. Любые идеи, как заставить это работать, кроме добавления пробелов слева от этого?

Нет другого места в коде, которое могло бы сделать что-либо для TreeView, кроме добавления и обработки столбцов. И нигде там не установлено выравнивание.

Ответы [ 2 ]

2 голосов
/ 20 июля 2012

Кажется, что alignment влияет только на выравнивание текста в макете. Поскольку макет имеет такую ​​же ширину, как и содержащийся в нем текст, alignment вообще ничего не делает, если в нем нет нескольких строк.

Чтобы на самом деле текст центрировался в столбце, вам также нужно установить xalign = 0.5f, таким образом:

private void RenderEntryValue (Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel model, Gtk.TreeIter iter)
{
    (cell as Gtk.CellRendererText).Markup = "" + someMarkupText;
    (cell as Gtk.CellRendererText).Alignment = Pango.Alignment.Center;
    cell.Xalign = 0.5f;
}
0 голосов
/ 25 марта 2012

Хотя это и не решение, я, по крайней мере, нашел обходной путь в виде пользовательского CellRenderer.Каким-то образом это не помещает текст в центр, но на несколько пикселей слева от него, но это все же намного лучше, чем полное игнорирование выравнивания;)

public class CellRendererAlignedText : CellRendererText
{
    /**
     * Overridden render method to position text correctly.
     * */
    protected override void Render (Gdk.Drawable window, 
                                    Widget widget, 
                                    Gdk.Rectangle background_area, 
                                    Gdk.Rectangle cell_area, 
                                    Gdk.Rectangle expose_area, 
                                    CellRendererState flags)
    {
        if (Alignment == Pango.Alignment.Center)
        {   
            cell_area.X += background_area.Width/4;
            cell_area.Width /= 2;
        }
        base.Render (window, widget, background_area, cell_area, expose_area, flags);
    }
}
...