首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GridSplitter行为

GridSplitter行为
EN

Stack Overflow用户
提问于 2016-02-04 06:00:35
回答 1查看 210关注 0票数 0

我正在尝试将列和网格拆分器添加到网格中,但无法获得确切的行为。

在用户指定要显示垂直拆分器的位置后:

代码语言:javascript
复制
             // Get current Col0 width, size new col and existing Col0
            double col0Width = LayoutRoot.ColumnDefinitions[0].ActualWidth;
            double newCol0Width = col0Width - 5 - pt.X;
            LayoutRoot.ColumnDefinitions[0].Width = new GridLength(newCol0Width);

            // New Column 0
            var c = new ColumnDefinition();
            c.Width = new GridLength(pt.X);
            LayoutRoot.ColumnDefinitions.Insert(0, c);// Attach GridSplitter to left edge of existing first column
            var gss = new GridSplitter();
            gss.Background = new SolidColorBrush(Colors.DarkSlateBlue);
            gss.Width = 5;    gss.Cursor = Cursors.ScrollWE;
            gss.ResizeBehavior = GridResizeBehavior.BasedOnAlignment;
            gss.HorizontalAlignment = HorizontalAlignment.Left;

            LayoutRoot.Children.Add(gss);
            // Add to current left-most colunn
            Grid.SetColumn(gss, 0);

            // Create new column, insert
            // New Column 0
            var c = new ColumnDefinition();
            c.Width = new GridLength(pt.X);
            LayoutRoot.ColumnDefinitions.Insert(0, c);  

            // Move existing content from Col 0 to new Col 1.  

我可以重复这个步骤,创建任意数量的垂直拆分器。

所需的调整大小行为:移动拆分器仅调整immed列的大小。拆分器的左侧和右侧。

当前的调整大小行为:移动拆分器将拆分器右侧的所有对象视为一个对象,扩展或缩小拆分器左侧的列,同时将所有内容移动到右侧。也就是说,如果有3列,移动最左侧的拆分器似乎会将col2推向右侧,并收缩col3,而不会调整col2的大小。

(我希望我已经解释得足够清楚了。)

我已经尝试将GridSplitters放在它们自己的列中,并尝试了各种GridResizeBehaviors,但没有找到正确的组合。

任何建议都将不胜感激……

还有一个相关的问题:在GridSplitter的OnDragDelta的事件处理程序中,有没有一种方法可以阻止拆分器在某个方向上进一步移动?我希望阻止他们将最右边的列缩小到某个宽度以下,同时允许他们将拆分器移回左侧。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2016-02-04 09:20:18

正如我的评论所建议的,看起来列需要'*‘大小。

因此,在添加了新的列和拆分器之后,我像这样设置了宽度(解决方案中的第一个笨拙的剪切):

代码语言:javascript
复制
 // Get all col widths, set appropriate '*' sizes.
        foreach (ColumnDefinition col in LayoutRoot.ColumnDefinitions)
        {
            colWidths.Add(col.Width);
            total += col.Width.Value;

            Debug.WriteLine($" Width : {col.Width}");
        }

        Debug.WriteLine($"{total}");

        for (int i = 0; i < LayoutRoot.ColumnDefinitions.Count; i++)
        {
            double d = colWidths[i].Value;
            double ratio = d / total;
            int ii = (int) (ratio * 100);

            LayoutRoot.ColumnDefinitions[i].Width = new GridLength(ii, GridUnitType.Star);
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35188610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档