当用户控件布局更新时,固定网格中的动态行会被压缩

时间:2014-12-09 15:18:11

标签: c# wpf

我在xaml中有一个网格:      

我动态创建了许多行:

        for (int i = 1; i <= numHorizLines - 1; i++)
        {
            RowDefinition r = new RowDefinition();
            r.Height = new GridLength(Convert.ToDouble(size), GridUnitType.Star);
            gVertNums.RowDefinitions.Add(r);
        }

当usercontrol的layout_updated事件触发时,我执行循环以根据控件的高度重新创建行数(在清除gVertNums网格中的所有内容之后)。我将文本块添加到网格行中,其中包含数字(为简单起见,请保留该代码)。

当主窗口首次打开时,这很有效。但是,当layout_updated事件再次触发时,gVertNums会显示正确的行数,但它们会被压扁。

看起来网格高度正在发生,导致行被压扁。即使我将gVertNums.height重置为新布局的高度,行也会被刷过......

以下是主窗口打开的屏幕截图:

on main window open

以下是用户控件调整大小时的屏幕截图:

after usercontrol is resized

在此示例中,网格宽度已更改但高度未更改且行仍然被挤压在一起。间距是“大小”(25像素)。

为什么会发生这种情况?

1 个答案:

答案 0 :(得分:0)

您目前没有(已显示)正在清除RowDefinitions的代码。因此,在再次添加它们之后,您现在可能会有两倍的行数。

试试这个

gVertNums.RowDefinitions.Clear();
for (int i = 1; i <= numHorizLines - 1; i++)
    {
        RowDefinition r = new RowDefinition();
        r.Height = new GridLength(Convert.ToDouble(size), GridUnitType.Star);
        gVertNums.RowDefinitions.Add(r);
    }