2011-05-04 89 views
4

我有一个WPF窗口与网格:获取实际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> 

在代码隐藏,我加入一个StackPanel到第1列,mainGrid的第二排,但我想最大宽度的堆栈面板的宽度为1 - 50px。我迷迷糊糊翻过stkPanel.Width = mainGrid.ColumnDefinitions(1).Width.ToString - 50,但是这将与错误:

700 *不能转换为double

有没有办法让网格列的实际宽度,因为它出现在屏幕上使用我想要的方式,还是设置填充或类似?

感谢,

马特

回答

3

原来我几乎没有。 50

我应该用

stkPanel.Width = mainGrid.ColumnDefinitions〔1 - 代替使用

stkPanel.Width = mainGrid.ColumnDefinitions [1] .Width.ToString的] .ActualWidth.ToString - 50

3

虽然自己可以使用行和列大小算术,但您应该知道存在缺陷机智这种方法。当数据发生变化或窗口大小调整后,网格的布局将会更新,并且所有内容都会更改。当然,你可以适应这些变化,但这是更多的工作。相反,如果可以的话,您可以尝试使用额外的列和列跨越网格本身来做所有事情。然后网格将照顾所有肮脏的工作,你可以专注于外观。

4

您有一个Grid两个属性:

Grid g = new Grid(); 
double width1 = g.ActualWidth; 
double width2 = g.RenderSize.Width; 

这两个应该做的伎俩,尝试

0

必须使用ActualWidth的和的ActualHeight。例如:

stkPanel.Width = mainGrid.ColumnDefinitions[1].ActualWidth - 50;