【问题标题】:Control positioning & binding控制定位和绑定
【发布时间】:2010-09-13 15:27:57
【问题描述】:

自从第一个框架推出以来,我就一直在使用 WinForms,并为此投入了大量的时间和精力。现在我正在尝试迁移到 WPF,老实说,这并不容易。

现在我有一个任务,我需要实现一个简单的向导,它的每个页面都有一个对齐到中心的控件组。该组包含一组按钮,连续四个按钮。组的宽度是恒定的,高度是可变的——这取决于里面的按钮数量。

对于 WinForms 来说这是一项简单的任务,但我不知道如何使用 XAML 来完成。

我有三个问题:

1)。显然,组内的按钮是一个 WrapPanel,它被放置在 Grid 的单元格中。这很简单。但是如何在不使用代码的情况下计算 WrapPanel 的高度?

2)。推荐哪种方式来实现向导?数据模板还是某种Tab Control?切换页面时我可能需要一些过渡效果。

3)。在 WPF 世界中使用绑定作为重新定位控件的一种方式是否可以接受?

提前谢谢你!

【问题讨论】:

    标签: c# .net wpf user-interface


    【解决方案1】:

    默认情况下,WrapPanel 将根据其内容自动调整其高度。正是因为新的布局范例,WPF 是 WinForms 的一大进步。您提到的任何内容都不需要任何代码。

    至于2;有很多方法可以实现这一点,具体取决于您对 MVVM 的坚持程度(如果有的话);我建议首先使用样式化的 TabControl(您可以调整样式以将向导中的步骤直观地呈现为选项卡,而不会让用户在选项卡之间跳转),因为它是最简单的。此外,几乎可以将所有内容绑定到 TabControl。

    3 是可能的,但应该很少需要。我是认真的。

    那么现在;一个简单的例子向您展示 WPF 的强大功能。 您可以在您的 ViewModel 中拥有(如果您不熟悉 MVVM 谷歌它或阅读任何Josh Smith 的文章或书籍或......哇,它有如此丰富的信息,我不知道该选择哪个) 一个对象集合,比如说 Step 类,您可以将其绑定到 TabControl 的 ItemsSource。 TabControl 将自动为您的每个步骤创建一个选项卡。 在您的 Step 类中,您可以拥有一组项目,比如说......嗯,Collection<Push>(我正在努力不使用已知的类,如 Action 或 Button)。如果 TabControl 的 ItemTemplate 包含识别该集合的任何内容,例如在内部设置样式以将 WrapPanel 用于其 ItemsContainer 的 ListBox 中,那么您就完成了:模板将在 WrapPanel 中显示推送列表,仅此而已。

    现在,我可能不应该在这里写一个完整的教程,但这应该能让你开始。阅读 DataTemplates、ItemsControl 等(同样,我在挑选资源时遇到了困难……Dr. WPF 两者都有很棒的文章,但它们可能有点先进),你应该很高兴。请记住,WPF 具有比任何以前的桌面技术更流畅的布局是有充分理由的,您应该熟悉这一点。

    【讨论】:

    • 谢谢亚历克斯!我对 MVVM 很熟悉,所以我不会有问题。但我仍然不明白如何定位 WrapPanel:如果它放置在网格单元格中,那么它具有固定高度 == 网格单元格的高度。
    • 其实只有这样设置才会有固定的高度。如果它包含在网格单元格中并且需要更多空间(您向其中添加更多项目),它将请求更多空间并重新布局;如果父级拒绝更多空间的请求,它将被限制在父级允许的最大值。这一切都因您可以设置的许多属性而变得复杂,例如水平和垂直对齐、拉伸、与滚动相关的属性等,以及每个控件中内置的布局子规则。但是,如果您在设计器中玩了一段时间,所有这些都会变得非常明显。
    • 谢谢你,亚历克斯!你帮了大忙!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多