изменить поведение заполнения ItemsControl [duplicate]

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

31
задан Noam M 13 August 2015 в 10:34
поделиться

7 ответов

Так же:

<StackPanel VerticalAlignment="Bottom">
    ...
</StackPanel>

и для заполнения кнопками вверх вы должны вставлять кнопки в позиции 0 вместо их добавления.

42
ответ дан Pop Catalin 19 August 2018 в 16:00
поделиться
  • 1
    Заполнение путем вставки, конечно, работает только при добавлении элементов вручную в код. Я разработал (с некоторой помощью) ReversibleStackPanel здесь, который может быть полезен для людей: stackoverflow.com/questions/3428622/… – devios1 8 August 2010 в 16:45
  • 2
    Имел аналогичную проблему: заполнение справа налево работает, установив HorizontalAlignment="Right". – ChriPf 18 August 2014 в 13:34

Любить преобразование решения Nir. Мне было интересно, можно ли это сделать с помощью преобразований.

Однако одно предостережение: не используйте трюк трансформации в элементе управления ScrollView, например ListBox, потому что операция полосы прокрутки будет инвертирована из содержимого , Весело наблюдать, если вы не являетесь конечным пользователем. ;>

-1
ответ дан dthorpe 19 August 2018 в 16:00
поделиться

Другой альтернативой является использование DockPanel вместо этого.

Просто установите для LastChildFill значение false на DockPanel.

Затем установите свойство прикрепленной док-станции на каждую кнопку, которую вы добавляете в нижнюю часть перед добавлением в DockPanel.

пример:

            var button = new Button();
            DockPanel.SetDock(button, Dock.Bottom);
8
ответ дан JB. 19 August 2018 в 16:00
поделиться
  • 1
    LastChildFill! Хотел бы я знать об этом раньше! Почему у них не было док-станции. Я никогда не узнаю. Все это, принимая последнего ребенка за заполнение, смешно. – devios1 7 August 2010 в 01:03
15
ответ дан Nir 19 August 2018 в 16:00
поделиться

Лучший способ решить проблему - реализовать пользовательский контейнер, полученный из stackpanel, но быстрое и грязное решение, если элементы добавлены во время выполнения

    public Window1()
    {
        InitializeComponent();
        for (int i = 0; i < 10; i++)
        {
            Button btn = new Button();
            btn.Content = "Button " + i;
            MyStack.Children.Insert(0, btn);
        }
    }

Просто вставьте элемент в 0 позицию вместо добавления .

3
ответ дан Oleg 19 August 2018 в 16:00
поделиться

Попробуйте поместить StackPanel в другой контейнер (не StackPanel, возможно DockPanel) и выровнять его по нижнему краю. Затем, когда вы заполняете кнопки, поместите каждый новый в первую позицию.

2
ответ дан Ria 19 August 2018 в 16:00
поделиться

Я обнаружил, что использование UniformGrid с Column = 1 дает аккуратный стек заполнения или набор Rows = 1 дает аккуратный горизонтально заполненный стек. И добавление из индекса 0 будет работать снизу вверх.

1
ответ дан Tri Q Tran 19 August 2018 в 16:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: