2012-03-11 40 views
1

And another TreeView problem,应该已经使用QT)的TreeView:Pango.Alignment不工作

我有,我用下面的函数来显示文本的树视图:

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做任何事情,除了添加和取消列。在那里没有任何对齐设置。

回答

0

虽然不是解决方案,但我至少已经找到了自定义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); 
    } 
} 
2

似乎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; 
}