Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 控制定位与控制;结合_C#_.net_Wpf_User Interface - Fatal编程技术网

C# 控制定位与控制;结合

C# 控制定位与控制;结合,c#,.net,wpf,user-interface,C#,.net,Wpf,User Interface,自从第一个框架引入以来,我一直在使用WinForms,并为此投入了大量的时间和精力。现在我正试图转向WPF,老实说,这并不容易 现在我有了一个任务,我需要实现一个简单的向导,其中每个页面都有一组与中心对齐的控件。该组包含一组按钮,一行四个按钮。组的宽度是恒定的,高度是可变的——这取决于内部按钮的数量 这对于WinForms来说是一项简单的任务,但我不知道如何使用XAML来完成 我有三个问题: 1) 。显然,组中的按钮是放置在网格单元中的包装。很简单。但不使用代码隐藏,如何计算包裹物的高度呢 2

自从第一个框架引入以来,我一直在使用WinForms,并为此投入了大量的时间和精力。现在我正试图转向WPF,老实说,这并不容易

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

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

我有三个问题:

1) 。显然,组中的按钮是放置在网格单元中的包装。很简单。但不使用代码隐藏,如何计算包裹物的高度呢

2) 。建议采用哪种方式实现该向导?数据模板还是某种选项卡控件?切换页面时,我可能需要一些过渡效果

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


提前谢谢你

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

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

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

那么现在;一个简单的例子向您展示WPF的强大功能。 你可以在你的ViewModel中(如果你不熟悉MVVM google it,或者没有读过他的任何文章或书籍,或者……哇,关于它的信息太丰富了,我不知道该选择哪一个)有一个对象集合,比如说Step类,你可以绑定到TabControl的ItemsSource。TabControl将自动为每个步骤创建一个选项卡。 在Step类中,您可以有一组项,比如说。。。嗯,
Collection
(我很难不使用Action或Button之类的已知类)。如果TabControl的ItemTemplate包含识别该集合的任何内容,比如在一个列表框中,该列表框的内部样式是将WrapPanel用于其ItemsContainer,那么您就完成了:该模板将在WrapPanel中显示推送列表,仅此而已


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

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