在WPF应用程序中动态创建按钮列表

5
我即将开发我的第一个WPF应用程序。
我希望能够获得一系列按钮列表。这些按钮是由WPF顶部的“添加”按钮生成的。
当我按下“添加”时,新的按钮会显示在列表中。
首先,我该如何创建这个列表?使用ListBox还是StackPanel?我认为StackPanel看起来很不错,但我不确定如何在其中添加按钮...
另一个问题是:通常,当我生成一个对象(我来自Java),每个对象都有一个唯一的实例。但是,我该如何为每个按钮赋予一个唯一的名称?
希望你能帮助我。

1
如果你想正确地使用WPF,它可能有点棘手。我建议你找一本好书来学习,StackOverflow不是这样一个广泛问题的正确平台。 - nvoigt
请明确您的问题并清晰地展示您的代码,指出其不足之处,这样我们才能提供帮助。最好的问候。 - Alexander Bell
谢谢 - 这本书已经订购了,我希望它能在星期五到达我的邮箱。 - sibe94
2个回答

25

停止。现在就停下来。

在你做任何事情之前,先学习基本的MVVM。WPF不是WinForms(或其Java等效物)。在你知道何时应该这样做之前,不应该以编程方式更改UI。

这些按钮应该代表数据。这些数据应该在你的视图模型中的某个地方。然后你就会有一个像这样的ItemsControl

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

现在,您可以根据绑定对象获取所有唯一的信息(无需唯一名称)。您甚至可以使ItemsControl使用StackPanel作为底层面板(顺便说一下,默认情况下它就是这样做的)。


我同意@BradleyDotNET的观点 - 你应该遵循与WPF应用程序开发相关的不同软件范例。最好的问候, - Alexander Bell
下投票者是否愿意发表评论? - BradleyDotNET
我目前还没有完全理解你的意思。你的例子是用来创建按钮的模板吗? - sibe94
@jens12345675432 是的,那正是它所做的。正如我在另一个答案的评论中所指出的那样,在尝试数据模板之前,我会确保掌握MVVM和基本绑定。不过听起来你已经有了这个想法。 - BradleyDotNET
谢谢你的帮助 - 我昨天订了一本书,但是等不及了。我现在会继续在网上阅读有关DataTemplates的内容。 - sibe94

1

由于您需要动态行为且这是您的第一个WPF应用程序,因此您应该在代码后端编写此内容。

只需给您的StackPanel命名(将名称属性添加到其中),并在按钮中处理单击事件(只需在WPF可视编辑器中双击该按钮)。

在单击事件的处理程序内部,您可以执行以下操作:

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

当然,要为该按钮添加行为,您可以将其分配给一个变量,并添加适当的事件处理程序。

由于这是他的第一个WPF应用程序,请学习正确的方法。尽管这样做可以工作,但这并不是一个好主意。 - BradleyDotNET
我不确定是否同意,“ItemsControl”在WPF中是一个有点高级的话题,我不确定初学者能否完全掌握它。 - Tejas Sharma
3
@BradleyDotNET,当然,这是个人观点。但我认为,WPF 有一个陡峭的学习曲线,将其与 MVVM 混合可能需要几周时间才能让 OP 开始做任何事情。逐步学习是很好的。 - Bruno Brant
谢谢,这已经帮了我很多! - sibe94
@TejasSharma 和 Bruno。毫无疑问,直接跳入模板并不是一个好的起点。这就是为什么我说他应该在做这个之前学习MVVM范例。这是一个很好的第二或第三个项目。他需要先了解基本绑定。但是养成坏习惯(比如编程方式操纵UI)对他没有任何好处。 - BradleyDotNET
1
如果这是你的第一个应用程序,我同意在代码后面写东西不是问题。我不会太担心,因为XAML只是定义对象而已。 - Epirocks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接