2012-03-11 5 views
1

And another TreeView problem, aurait dû qt utilisé;)TreeView: Pango.Alignment ne fonctionne pas

J'ai un TreeView dans lequel j'utilise la fonction suivante pour rendre le texte:

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

Comme vous l'avez deviné du sujet, cela ne fonctionne pas. Le texte reste aligné à gauche. Des idées pour le faire fonctionner, autre que d'ajouter des espaces à sa gauche?

Il n'y a pas d'autre endroit dans le code qui ferait quoi que ce soit à l'arbre TreeView autre que d'ajouter et de feining les colonnes. Et nulle part là-bas, un alignement n'est défini.

Répondre

0

Bien que n'étant pas une solution, j'ai au moins trouvé une solution de contournement sous la forme d'un CellRenderer personnalisé. D'une certaine façon, cela ne met pas le texte vraiment au centre, mais quelques pixels à gauche de celui-ci, mais qui est encore beaucoup mieux que ignorant complètement l'alignement;)

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

Il semble que alignment affecte uniquement l'alignement du texte dans la mise en page. Puisque la mise en page est seulement aussi large que le texte qu'elle contient, alignment ne fait rien du tout à moins qu'il y ait plusieurs lignes.

Pour obtenir un texte réellement centré dans la colonne, vous devez également définir xalign = 0.5f, ainsi:

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; 
} 
Questions connexes