2014-12-18 2 views
2

Я собираюсь разработать свой первый WPF.Динамическое создание списка кнопок в приложении WPF

Я хочу получить список кнопок. Кнопки генерируются ОДНОЙ кнопкой «Добавить» в верхней части WPF.

Поэтому, когда я нажимаю «Добавить», в списке появляются новые кнопки.

Первый, как я создаю список? С ListBox или StackPanel? Я думаю, что для взгляда StackPanel было бы неплохо, но я не уверен, как добавить туда кнопки ...

И еще вопрос: Обычно, когда я сгенерирую объект (я прихожу из Java), каждый объект получает уникальный пример. Но как я даю каждой кнопке уникальное имя?

Надеюсь, вы можете мне помочь

+1

WPF может быть немного сложным, если вы хотите сделать это правильно. Я предлагаю вам получить хорошую книгу по этому вопросу, StackOverflow не подходит для такого широкого вопроса. – nvoigt

+0

Пожалуйста, сузите свой вопрос и четко покажите свой код, указав его недостатки, чтобы мы могли помочь. С уважением, –

+0

Спасибо - книга уже заказана, и я надеюсь, что она будет в моем почтовом ящике в пятницу – sibe94

ответ

11

Остановить. Прямо сейчас.

Прежде чем вы сделаете что-нибудь, изучите базовый MVVM. WPF не WinForms (или его эквивалент Java). Вы не должны программно изменять пользовательский интерфейс, пока не знаете, когда вы это сделаете.

Эти кнопки должны представлять данные. Эти данные должны быть в вашей модели. Тогда вы бы иметь ItemsControl так:

<ItemsControl ItemsSource="{Binding MyCollection}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Button ... /> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

Теперь вы можете получить всю уникальную информацию вам нужно на основе связанного объекта (нет необходимости в уникальных имен). Вы можете даже сделать ItemsControl в качестве базовой панели StackPanel (кстати, она по умолчанию).

+0

Я согласен с @BradleyDotNET - вам следует придерживаться другой парадигмы программного обеспечения, относящейся к приложению WPF. С наилучшими пожеланиями, –

+0

Может ли downvoter оставить комментарий? – BradleyDotNET

+0

Im в настоящее время не понимает вас 100%. Является ли ваш пример шаблоном для создаваемых кнопок? – sibe94

1

Поскольку вам нужно динамическое поведение, и это ваше первое приложение WPF, вы должны написать это по коду.

Просто введите свой StackPanel что-нибудь (добавьте к нему атрибут имени) и обработайте событие click в кнопке (просто дважды нажмите кнопку в визуальном редакторе WPF).

Внутри обработчика события щелчка, вы можете сделать что-то вроде этого:

this.MyStackPanel.Children.Add(new Button()); 

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

+0

Поскольку это его первое приложение WPF, пожалуйста, просто изучите правильный способ сделать это. Конечно, это сработает, это просто не очень хорошая идея. – BradleyDotNET

+0

Не уверен, что я согласен, 'ItemsControl' - это (imo) немного продвинутая тема в wpf, и я не уверен, что новичок сможет ее полностью понять. –

+2

@BradleyDotNET, это вопрос мнения, конечно. Но, на мой взгляд, WPF имеет крутую кривую обучения, и смешение ее с MVVM может привести к нескольким неделям, прежде чем OP сможет что-либо сделать. Хорошо учиться маленькими шагами. –

Смежные вопросы