1

そして別の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に何かを行うコード内の場所は他にありません。そして、そこにはどこにも配置が設定されていません。

4

2 に答える 2

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;
}
于 2012-07-20T18:31:33.643 に答える
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);
    }
}
于 2012-03-25T15:43:10.833 に答える