改变在鞋子的堆的背景

时间:2014-03-07 18:10:01

标签: ruby shoes

我正在创建一个学习红宝石和鞋子的乐趣应用程序,但似乎我无法完成我正在尝试做的事情......

我有一个包含一些文本的堆栈,在某些情况下,我想更改该堆栈的背景,但由于某种原因,堆栈中的所有文本都被删除。 我怎么能避免这种情况?我只是想改变背景颜色。

显示问题的示例代码:

Shoes.app do

    @first_stack = stack do
        background orange
        @title = title "my title"
        @subtitle = subtitle "my subtitle"
    end 

    button ("change background") {
        @first_stack.background gold
    }

end

3 个答案:

答案 0 :(得分:3)

似乎背景会创建一个填充,这意味着您的文本仍然只是嵌套在填充下。这是一个解决方法

Shoes.app do 
  def change_color(back)
    @first_stack.clear
    @first_stack.background back
    @first_stack.title @title
    @first_stack.subtitle @subtitle
  end
  @first_stack = stack do
    background orange
    @title = title "my title"
    @subtitle = subtitle "my subtitle"
  end 

  button ("change background") do 
    change_color(gold)
  end
end

这只是清除第一个堆栈并使用新颜色重新创建它。仍然在寻找一种更有说服力的方法。

编辑

找到解决方案:

Shoes.app do
  @first_stack = stack do
      @fs_background = background orange
      @title = title "my title"
      @subtitle = subtitle "my subtitle"
  end 
  button ("change background") do
     @fs_background.remove
     @first_stack.before(@title) {@fs_background = background gold}
  end
end

这将按照您想要的方式工作,因为它将背景图层放在原始背景图层的顶部但在@title之前。

答案 1 :(得分:0)

假设你将背景作为第一个元素:

Shoes.app do
  @f = stack do
    background blue
    title "my title"
    subtitle "my subtitle"
  end 
  button ("change background") do
     @f.children.first.remove
     @f.before(@f.children.first) {
       background gold
     }
  end
end

答案 2 :(得分:0)

在Shoes3.3.1中你可以这样做

Shoes.app do
    @first_stack = stack do
        background orange
        @title = title "my title"
        @subtitle = subtitle "my subtitle"
    end 

    button ("change background") {
        @first_stack.contents[0].fill = gold
        @first_stack.refresh_slot
    }
end