获取实际WPF网格宽度

获取实际WPF网格宽度,wpf,grid,width,stackpanel,Wpf,Grid,Width,Stackpanel,我有一个带有网格的WPF窗口: <Grid Name="mainGrid"> <Grid.ColumnDefinitions> <ColumnDefinition Width="20*" /> <ColumnDefinition Width="700*" /> <ColumnDefinition Width="190*" /> </Grid.ColumnDefinitions> <G

我有一个带有网格的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>

在codebehind中,我将stackpanel添加到主网格的第2行第1列,但我希望stackpanel的最大宽度为第1-50px列的宽度。我无意中访问了accross
stkPanel.Width=mainGrid.ColumnDefinitions(1).Width.ToString-50
,但这将导致以下错误:

700*不能转换为双精度

是否有一种方法可以获得屏幕上显示的网格列的实际宽度,以使用我想要的方式,或者设置填充或类似设置

谢谢


马特

原来我就快到了。而不是使用

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

我应该用

stkPanel.Width=mainGrid.ColumnDefinitions[1]。实际宽度.ToString-50


当您自己进行行和列大小计算时,您应该知道这种方法存在缺陷。当数据更改或窗口调整大小时,网格的布局将更新,所有内容都可能更改。当然,你可以适应这些变化,但这需要更多的工作


相反,如果可以的话,您可以尝试使用额外的列和列跨度来处理网格本身。然后网格将处理所有脏活,您可以关注外观。

网格有两个属性:

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

这两个应该可以做到,试试看。你必须使用实际宽度和实际高度。 例如:

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