我有一个带网格的WPF窗口:
<Grid Name="mainGrid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20*" />
<ColumnDefinition Width="700*" />
<ColumnDefinition Width="190*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="80" />
<RowDefinition Height="220*" />
<RowDefinition Height="450*" />
<RowDefinition Height="160*" />
<RowDefinition Height="30" />
</Grid.RowDefinitions>
</Grid>
在代码隐藏中,我在第一列,第二行mainGrid中添加了一个stackpanel,但我希望stackpanel的最大宽度为第1列的宽度 - 50px。我偶然发现了stkPanel.Width = mainGrid.ColumnDefinitions(1).Width.ToString - 50
,但这会导致错误:
700 *无法转换为双倍
有没有办法获得网格列的实际宽度,因为它显示在屏幕上以使用我想要的方式,或者我是否设置填充或类似?
谢谢,
马特
答案 0 :(得分:5)
Grid
有两个属性:
Grid g = new Grid();
double width1 = g.ActualWidth;
double width2 = g.RenderSize.Width;
这两个应该成功,试试吧
答案 1 :(得分:3)
原来我几乎就在那里。而不是使用
stkPanel.Width = mainGrid.ColumnDefinitions [1] .Width.ToString - 50
我应该用
stkPanel.Width = mainGrid.ColumnDefinitions [1] .ActualWidth.ToString - 50
答案 2 :(得分:3)
虽然自己行和列大小算法可以工作,但你应该知道这种方法存在缺陷。当您的数据更改或调整窗口大小时,网格的布局将会更新,一切都可以更改。当然,你可以适应这些变化,但这是更多的工作。
相反,如果可以,您可以尝试使用额外的列和列跨度来完成网格本身的所有操作。然后网格将处理所有肮脏的工作,你可以专注于外观。
答案 3 :(得分:0)
您必须使用ActualWidth和ActualHeight。 例如:
stkPanel.Width = mainGrid.ColumnDefinitions[1].ActualWidth - 50;