WPF:在Canvas或Grid上定位表单元素?

时间:2011-03-01 15:35:26

标签: c# wpf xaml

我更喜欢通过visual studio designer在画布上拖动控件,这样每个控件都有一个x和y坐标。我发现它比使用网格更快。但我仍然看到很多文章使用网格来布局控件,因此每个控件都有一行,一列。你对此有何看法,我的做法是错误的?

5 个答案:

答案 0 :(得分:2)

通过使用画布,很难以一种好的方式调整所有大小,其他控件将自动调整大小(如果不是固定大小的课程)

答案 1 :(得分:1)

使用各种容器需要一些练习,但这是值得的。当您的控件位于容器中时,调整大小会自动生效,并且您的XAML会更有条理。

查看易于使用的第三方容器,例如autogrid

答案 2 :(得分:1)

MS的标准指导是避免使用Canvas来布局控件。

引自MSDN Canvas文档:

  

Canvas是唯一的面板元素   没有固有的布局   特点。 Canvas有默认值   高度和宽度属性为零,   除非它是一个元素的孩子   自动调整其孩子的大小   元素。画布的儿童元素   永远不会调整大小,他们只是   定位在他们指定的   坐标。这提供了灵活性   对于固有的情况   尺寸限制或对齐是   不需要或不想要的。对于案件   你想要儿童内容   它自动调整大小并对齐   通常最好使用Grid元素。

所以,我认为这意味着在大多数情况下你不想使用Canvas而是使用Grid(或其他面板)来包含各种子UI元素。我个人觉得网格足以满足大多数需求。

参考文献:

画布 - http://msdn.microsoft.com/en-us/library/system.windows.controls.canvas.aspx

全球化和本地化 - http://msdn.microsoft.com/en-us/library/ms788718.aspx

答案 3 :(得分:0)

首选使用网格(行和列),因为它不依赖于屏幕分辨率。

答案 4 :(得分:0)

错误原因WPF支持其他替代读取方向。如果本地化发生变化,对于WPF,它不可能重新映射X / Y坐标,但在Grids和StackPanels中逻辑排列可以反转/更改。

绝对定位元素很少有好处