【问题标题】:Get actual WPF Grid Width获取实际的 WPF 网格宽度
【发布时间】:2011-08-18 04:57:37
【问题描述】:

我有一个带有网格的 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 的第一列第二行,但我希望堆栈面板的最大宽度为第 1 列的宽度 - 50px。我偶然发现了stkPanel.Width = mainGrid.ColumnDefinitions(1).Width.ToString - 50,但这会出错:

700* 无法转换为双精度

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

谢谢,

马特

【问题讨论】:

    标签: wpf grid width stackpanel


    【解决方案1】:

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

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

    我应该用过

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

    【讨论】:

      【解决方案2】:

      虽然自己进行行和列大小算术是可行的,但您应该意识到这种方法存在缺陷。当您的数据更改或调整窗口大小时,网格的布局将更新,一切都可能发生变化。当然,您可以适应这些变化,但这需要更多的工作。

      相反,如果可以的话,您可以尝试使用额外的列和列跨越来对网格本身进行所有操作。然后网格会处理所有脏活,你可以专注于外观。

      【讨论】:

        【解决方案3】:

        Grid 有两个属性:

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

        这两个应该可以解决问题,试试吧

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            猜你喜欢
            • 2013-01-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-04-01
            • 2013-09-24
            • 1970-01-01
            • 2012-08-08
            • 2011-09-18
            相关资源
            最近更新 更多