【发布时间】:2013-02-26 01:08:08
【问题描述】:
我创建了一个数据网格并将其放置在 WPF 表单中的某个位置。
现在我要做的是让数据网格更改其大小,使其保持与原始位置相同的比例,同时 WPF 窗口更改大小(希望这是有道理的)。
我尝试将 autostretch 设置为 true,但没有帮助。
【问题讨论】:
-
您是否尝试过设置左右边距值,以使网格相对于表单强制拉伸/收缩?
我创建了一个数据网格并将其放置在 WPF 表单中的某个位置。
现在我要做的是让数据网格更改其大小,使其保持与原始位置相同的比例,同时 WPF 窗口更改大小(希望这是有道理的)。
我尝试将 autostretch 设置为 true,但没有帮助。
【问题讨论】:
在我的办公室里有我的计算机和 Visual Studio,所以无法测试它:) 但是如果你将对齐设置为拉伸,这不应该工作吗?
datagridObj.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch; datagridObj.VerticalAlignment = System.Windows.VerticalAlignment.Stretch;
【讨论】:
这当然有道理,但听起来您并不真正了解 WPF 布局系统的工作原理,除非您这样做,否则将来会非常痛苦。简短的故事是,您需要有一个合适的容器——我推荐使用 Grid——并将 DataGrid 放置在该容器中。然后,您可以为 DataGrid 设置边距等,以随心所欲地放置它,并且如果它的 Width 和 Height 设置为 Auto,它将与它的父容器保持一致。
现在,如果您在图片中有几个其他控件,当然它会涉及更多,但我仍然建议保留网格并将它们分成您需要的任意多行和多列,然后为它们的高度设置适当的值/分别为宽度 - 您可以使某些列的宽度固定,或其他列的倍数,或者将它们保留为 Auto,它们将占用剩余的空间。
当然,该主题涉及更多,但您可以在 MSDN 上找到快速入门:http://msdn.microsoft.com/en-us/library/ms745058.aspx
如果您只记得一件事,应该是这样的:网格表示 WPF 中的流体布局,尽可能多地使用它们而不是画布。当然 StackPanel 和 DockPanel 等都有自己的具体用途。
附:视觉工作室设计师通常会做一些乱七八糟的事情,通过设置边距等使拖放更直观,你应该密切关注它修改的属性,看看你是否最好手动定位东西通过在绘制布局后修改 XAML(通常是这样)。
【讨论】:
举个例子
<Window x:Class=""
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<DataGrid Margin="162,57,141,54"/>
</Grid>
</Window>
默认情况下DataGrid 是
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
所以你只需要像 Arno Saxena 告诉你的那样的保证金
【讨论】: