如何动态创建按钮列表,并在列表框或项控件的 MainForm 中显示它们

本文关键字:列表 控件 MainForm 显示 动态 何动态 创建 按钮 | 更新日期: 2023-09-27 17:57:00

我是WPF的新人。我想使类列表中的按钮列表说"按钮",并在WPF的MainForm中有两个字段(ButtonContent,ButtonID)。这背后的想法是,当加载 MainForm 时,我想让按钮动态列出。链接中已经给出了最好的例子http://www.codeproject.com/Articles/25030/Animating-Interactive-D-Elements-in-a-D-Panel但我只想让大小相等的按钮水平堆叠。

如何在 WPF 中执行此操作?提前谢谢你。

如何动态创建按钮列表,并在列表框或项控件的 MainForm 中显示它们

这就是我会这样做的方式。 这里有一些领域需要您进一步研究,但这将帮助您入门。

首先,您需要视图模型。 这是普通的旧对象。 它公开了与您的业务相关的属性和方法。 你提到了ButtonContent和ButtonID。 让我们假设这两个现在都是字符串。 我假设您还需要一个按钮命令。

public class ButtonViewModel : INotifyPropertyChanged
{
   private string _content;
   public string Content
   {
      get{ return _content; }
      set{ _content = value; OnPropertyChanged("Content"); }
   }
   // you'll need to implement INotifyPropertyChanged
   // also take a look at RelayCommand
   // here is your command for you're button
   public ICommand ButtonCommand
   {
      get { return new RelayCommand(execute, canExecute); }
   }
   private void execute()
   {
     // my actual command code
   }
   private bool canExecute()
   {
      // this will automatically toggle the enabled state on my button
   }
}

您将拥有另一个视图模型。 这将是 MainWindow 的数据上下文。

public class AppViewModel
{
   public ObservableCollection<ButtonViewModel> MyButtons {get; set; }
   public AppViewModel()
   {
      MyButtons = new ObservableCollection<ButtonViewModel>();
      // add some demo data
      MyButtons.Add(new ButtonViewModel() {ButtonContent = "Click Me!"});

   }
}

现在,您需要实现视图。 在 MainWindow xaml 代码中。 添加您的 xmlns:local 命名空间。

<Window.DataContext>
   <local:AppViewModel />
</Window.DataContext>
<ListBox ItemsSource="{Binding MyButtons}">
   <ListBox.ItemsTemplate>
      <DataTemplate>
      <Button Command="{Binding ButtonCommand}" Content="{Binding Content}"/>
      </DataTemplate>
   <ListBox.ItemsTemplate>
</ListBox>

希望这能让你开始正确的方向。