Как изменить цвет фона виджета Entry в Monodevelop GTK #? - PullRequest
0 голосов
/ 21 января 2019

Я использую Monodevelop GTK # и пытаюсь изменить цвет фона в виджете ввода, но

entry.ModifyBase(StateType, Gdk.Color)

или

entry.ModifyBg(StateType, Gdk.Color)

не меняйте цвет фона для меня.

Возможно, кто-то сталкивался с этой проблемой и решил ее.

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Вы можете указать это, используя файлы GTK RC, при условии, что вы используете GTK # v2, а не v3. RC-файл объявляет стили, которые могут быть загружены в механизм управления окнами во время выполнения, когда вы запускаете ваше приложение.

Вы можете найти примеры файлов RC в Интернете, однако ниже приведен пример такого рода вещей:

gtk-color-scheme = "bg_colour:#101010
fg_colour:#FFFFFF
fg_insensitive_colour:#EEEEEE
bg_prelight_colour:#38a4da
bg_selected_colour:#38a4da

gtk-auto-mnemonics              = 1
gtk-primary-button-warps-slider = 1

engine "murrine" 
{
    contrast = 1.0
    glazestyle = 1                  # 0 = flat hilight, 1 = curved hilight, 2 = concave style, 3 = top curved hilight, 4 = beryl hilight
    menubarstyle = 0                # 0 = flat, 1 = glassy, 2 = gradient, 3 = striped
    menubaritemstyle = 1            # 0 = menuitem look, 1 = button look
    menuitemstyle = 0               # 0 = flat, 1 = glassy, 2 = striped
    listviewheaderstyle = 0         # 0 = flat, 1 = glassy, 2 = raised
    listviewstyle = 0               # 0 = nothing, 1 = dotted
    scrollbarstyle = 0              # 0 = nothing, 1 = circles, 2 = handles, 3 = diagonal stripes, 4 = diagonal stripes and handles, 5 = horizontal stripes, 6 = horizontal stripes and handles
    highlight_shade = 0.9555        # set the amount of buttons or widgets hilight
    roundness = 2                   # 0 = squared, 1 = old default, more will increase roundness
    reliefstyle = 2                 # 0 = flat, 1 = inset, 2 = shadow, 3 = gradient shadow, 4 = strong shadow
    lightborderstyle = 1            # 0 = on top, 1 = on all sides
    animation = FALSE               # FALSE = disabled, TRUE = enabled
    gradients = TRUE                
    glow_shade = 1.0
    comboboxstyle = 0               # 1 to colourize below button
    expanderstyle = 0               # 0 = arrows, 1 = circles, 2 = buttons
}

style "entry"
{
    xthickness = 3
    ythickness = 4

    base[ACTIVE] = @bg_colour
    base[INSENSITIVE] = @bg_colour
    base[NORMAL] = @bg_colour
    base[PRELIGHT] = @bg_prelight_colour
    base[SELECTED] = @bg_selected_colour

    bg[ACTIVE] = @bg_colour
    bg[INSENSITIVE] = @bg_colour
    bg[NORMAL] = @bg_colour
    bg[PRELIGHT] = @bg_colour
    bg[SELECTED] = @bg_colour

    fg[ACTIVE] = @fg_colour
    fg[INSENSITIVE] = @fg_insensitive_colour
    fg[NORMAL] = @fg_colour
    fg[PRELIGHT] = @fg_colour
    fg[SELECTED] = @fg_colour

    text[ACTIVE] = @fg_colour
    text[INSENSITIVE] = @fg_insensitive_colour
    text[NORMAL] = @fg_colour
    text[PRELIGHT] = @fg_colour
    text[SELECTED] = @fg_colour
}

class "GtkEntry"                style "entry"
"

C #, который вам нужен для загрузки вашего файла, выглядит следующим образом, который нужно будет вызывать где-нибудь в вашей программе static main (). Это предполагает, что ваш GTKRC является встроенным ресурсом внутри сборки в вашем проекте:

var _a = Assembly.GetAssembly (typeof (<your class>));
using (var _s = _a.GetManifestResourceStream ("<path in class's assembly to GTKRC file>")) {
    using (StreamReader _r = new StreamReader (_s)) {
        string _rc = _r.ReadToEnd ();
        Gtk.Rc.ParseString (_rc);
        Gtk.Settings.Default.ThemeName = "<your theme name>";
    }
}
0 голосов
/ 21 января 2019

Во многих случаях вы не можете ничего изменить: Gtk (и, следовательно, Gtk #) думает, что он знает лучше, чем вы, лучший стиль для ваших виджетов, и что методы ничего не делают.

...