【问题标题】:Tiling Windows Offset using Infragistics Dialog Window使用 Infragistics 对话窗口平铺窗口偏移
【发布时间】:2017-10-06 04:46:52
【问题描述】:

我正在使用 Infragistics XamDialogWindow 来近似 WPF 中的 MDI 窗口。

基本上,我有一个分配给窗口内容的用户控件,然后将 XamDialogWindow 添加为 Grid 的子项。

然后我有两个按钮,它们将窗口显示为“平铺”或“层叠”。

级联效果非常好,但我在使用 Tile 方法时遇到了问题。

我使用容器的“ActualWidth”和“ActualHeight”属性获取可用的宽度和高度。

然后我计算所需的行数和列数。

接下来我遍历列并计算一列中有多少行(这意味着如果有奇数个窗口,例如 5,我将在第 0 列有两行,在第 1 列有 3 行) .

每个窗口的宽度计算为“AvailableWidth / numColumns”

每个窗口的高度计算为“AvailableHeight / WindowsForThisColumn”

然后我遍历行并计算我们定位的窗口的左上角坐标如下:

left = columnIndex * width

top = rowIndex * 高度

然后设置窗口的 Left、Top、Width 和 Height 属性。

问题

Left、Top、Width 和 Height 属性似乎计算正确,例如

  • 可用宽度 = 1000;
  • AvailableHeight = 1000;
  • Window1 = 0, 0, 500, 500
  • Window2 = 0, 500, 500, 500
  • Window3 = 500, 0,500, 500
  • Window4 = 500、500、500、500

这应该会给出一个漂亮的 4 个窗口网格,没有边距填充所有可用空间,但这不是结果。

窗口在显示时似乎是偏移的(见下图)。

如果我查看 Left、Top、Width 和 Height 属性,它们似乎都是正确的。

奇怪的是,如果我再次点击“平铺”,它们都会正确显示。

如果我在第二次单击磁贴后移动窗口,它们将正确显示。

我尝试使用 Canvas 并设置 Canvas.Left 和 Top 属性、网格、stackpanel 和 wrappanel,每次都具有相同的结果。

谁能帮助我?我认为这可能是 WPF 如何在渲染时测量大小和位置的问题

 var childrenToArrange = Children.Where(a => a.WindowState != Infragistics.Controls.Interactions.WindowState.Minimized).ToList();

        var availableWidth = Panel.ActualWidth;
        var availableHeight = Panel.ActualHeight;

        if (Layout == MDILayout.TILE)
        {
            //get the number of rows and columns
            int rows = (int)Math.Sqrt(childrenToArrange.Count);
            int columns = childrenToArrange.Count / rows;

            var index = 0;
            var width = availableWidth / columns;

            //iterate through the columns
            for (int x = 0; x < columns; x++)
            {
                //get the number of windows for this column
                var windowsForThisColumn = rows;
                if (childrenToArrange.Count % columns > (columns - x - 1))
                    windowsForThisColumn++;

                var height = availableHeight / windowsForThisColumn;

                //iterate through the rows
                for (int y = 0; y < windowsForThisColumn; y++)
                {
                    //get the X and Y coordinates
                    var left = x * width;
                    var top = y * height;

                    //get the window
                    var mdiChild = childrenToArrange[index] as XamDialogWindow;

                    mdiChild.Margin = new Thickness(0);
                    mdiChild.Left = left;
                    mdiChild.Top = top;
                    mdiChild.Width = width;
                    mdiChild.Height = height;
                    index++;
                }
            }
        }

【问题讨论】:

  • 请给我您的示例代码,以便我处理它。我想要它在真实样本上进行调试。
  • 您是否按照您的问题回答?
  • 你的问题是什么?你只写“正确”和“正确”
  • 正确的是图像中的 4 个图块出现在没有重叠的网格中。不正确的是图像在图块重叠和略微偏移的位置显示方式

标签: c# wpf infragistics


【解决方案1】:

我已经用你的 sn-p 重现了这个问题。请单击以下超链接到Infragistics 的以下论坛帖子以获取更多说明。

  • 迈克尔·迪菲利波

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 2023-04-07
    • 2012-02-08
    • 1970-01-01
    • 2020-12-04
    相关资源
    最近更新 更多