locked
Пространство возле button RRS feed

  • Вопрос

  • Добрый вечер)

    Столкнулся с такой проблемой. Создаю кнопки, располагаю их одна за другой. Делаю margin=0. Но все равно на экране есть промежуток между кнопками, причем это пустота принадлежит кнопкам(т.е. при нажатии на нее, она относится к кнопке, к которой ближе). На скрине выделил их.

     

    Как убрать это?

    24 ноября 2013 г. 19:32

Ответы

  • Делайте следующее: в конструкторе xaml (не редакторе) нажимаете правой кнопкой мыши на кнопку, потом правка шаблона -> правка копии. Создается большой элемент Style. В нем найдёте после VisualStateManager элемент Border. Поставьте у этого Border Margin на 0 или на тот, который вам нужен. Чтобы контролировать этот Margin у Border, через указание в КНОПКЕ Margin, напишите не 0 (в Margin Border'а), а {TemplateBinding Margin}
    • Помечено в качестве ответа Strevg 26 ноября 2013 г. 12:09
    • Снята пометка об ответе Strevg 30 ноября 2013 г. 20:09
    • Помечено в качестве ответа Strevg 1 декабря 2013 г. 20:24
    25 ноября 2013 г. 14:32

Все ответы

  • Здравствуйте.

    Приведите, пожалуйста, кусочек на XAML, в котором Вы добавляете кнопки. Интересует контейнер, в который Вы их помещаете.

    24 ноября 2013 г. 20:06
  • Делайте следующее: в конструкторе xaml (не редакторе) нажимаете правой кнопкой мыши на кнопку, потом правка шаблона -> правка копии. Создается большой элемент Style. В нем найдёте после VisualStateManager элемент Border. Поставьте у этого Border Margin на 0 или на тот, который вам нужен. Чтобы контролировать этот Margin у Border, через указание в КНОПКЕ Margin, напишите не 0 (в Margin Border'а), а {TemplateBinding Margin}
    • Помечено в качестве ответа Strevg 26 ноября 2013 г. 12:09
    • Снята пометка об ответе Strevg 30 ноября 2013 г. 20:09
    • Помечено в качестве ответа Strevg 1 декабря 2013 г. 20:24
    25 ноября 2013 г. 14:32
  • kosuke904, я добавляю все на Canvas.
    25 ноября 2013 г. 14:49
  • Так же был сказать, что кнопки я генерирует через код. Следовательно нажать правой мышкой на кнопке не могу, так как кнопки появляются только после запуска приложения. 

     <Canvas x:Name="canvas">

     </Canvas>

    - это панель в которую добавляю кнопки.

    А вот код через который я это делаю

    canvas.Children.Add(buttons);

    25 ноября 2013 г. 14:54
  • Мне кажется, что Вы чего-то не договариваете. В Canvas элементы сами по себе не располагаются так (один за другим). Canvas требует задания абсолютного значения позиции любого дочернего элемента через свойства зависимостей Canvas.Left и Canvas.Top:

    Button b = new Button();
    b.Content = "Кнопка";
    
    b.SetValue(Canvas.LeftProperty, 123.0);
    b.SetValue(Canvas.TopProperty, 456.0);
    
    canvas.Children.Add(b);
    Если этого не сделать, элементы встанут один над другим. А раз так, подберите любые значения позиции, чтобы кнопки стояли как Вам нужно.

    25 ноября 2013 г. 19:17
  • sum_width=0;

    Canvas.SetTop(buttons[i], 200);
                        for (int j = 0; j <= i; j++)
                        {
                            Canvas.SetLeft(buttons[j], sum_width);
                            sum_width += (int)buttons[j].Width;
                        } Здесь я задаю левую координату для каждой кнопки. 

    Как видите она становиться сразу после предыдущей. Но на экране виден отступ, причем, как говорил ,он относиться к кнопке и на него можно нажимать.


        
    • Изменено Strevg 25 ноября 2013 г. 19:36
    25 ноября 2013 г. 19:32
  • Так ширина кнопки как раз и включает это пустое пространство. Как уже сказал Вам Progrik выше, у рамки в шаблоне кнопки есть свой Margin. За счет этого элементы, которые помещают в более интеллектуальный контейнер, чем Canvas, располагаются красиво.
    25 ноября 2013 г. 19:41
  • Я попробовал сделать по инструкции. У меня ничего не появляется в смысле, нет "правка шаблона -- правка копии". Можно поподробней сказать. Было бы шикарно, если показали скрин))
    30 ноября 2013 г. 20:11
  • Я все нашел, надо было сказать что это все в Blend)
    1 декабря 2013 г. 20:23