我正在尝试将列和网格拆分器添加到网格中,但无法获得确切的行为。
在用户指定要显示垂直拆分器的位置后:
// 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的事件处理程序中,有没有一种方法可以阻止拆分器在某个方向上进一步移动?我希望阻止他们将最右边的列缩小到某个宽度以下,同时允许他们将拆分器移回左侧。
谢谢。
发布于 2016-02-04 09:20:18
正如我的评论所建议的,看起来列需要'*‘大小。
因此,在添加了新的列和拆分器之后,我像这样设置了宽度(解决方案中的第一个笨拙的剪切):
// 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);
}https://stackoverflow.com/questions/35188610
复制相似问题