这个示例演示了GridSplitter控件的使用。
GridSplitter派生于Thumb,只能使用于Grid中,而且要指定它所在的row和column位置(以及行和列的span):
GridSplitter split = new GridSplitter();
split.Width = 6;
grid.Children.Add(split);
Grid.SetColumn(split, 2);
Grid.SetRow(split, 1);
GridSplitter可以和其它元素共享相同的单元格,这就存在谁遮挡了谁的问题——后出现的元素总是在前面,为此,需要设置margin,以避免重叠:
split.Margin = new Thickness(10);
一般会让GridSplitter跨越整行或整列,比较合理:
Grid.SetRowSpan(split, 3);
Grid.SetColumnSpan(split, 3);
一般把GridSplitter单独放在一个或一组单元格中
在这个例子中,通过设置GridSplitter的左对齐,可以看到遮挡效果,因为在Grid(1,1)这个位置,有两个元素,GridSplitter是后出现的元素:
<StackPanel Grid.Row="1" Grid.Column="1" Background="Red">
<TextBlock>Row 1 Col 1</TextBlock>
</StackPanel>
<GridSplitter Name="myGridSplitter" Grid.Column="1" Grid.Row="1" Width="5"/>
下面讨论GridSplitter的几个属性:
1)ShowsPreview属性,默认为fasle,也就是说拖动GridSplitter时看不到效果。而设置为true,则要等到松开鼠标,鸽子才会改变尺寸。
2)DragIncrement属性,设置这个值,可以决定每次鼠标拖动的距离。默认值为1。
3)KeyboardIncrement属性,设置每按下一次箭头键时移动 GridSplitter 控件的距离。默认值为1。
VerticalAlignment和HorizontalAlignment,是用来控制splitter是水平的还是垂直的。默认情况下,HorizontalAlignment为Right且VerticalAlignment为Stretch,此时splitter位于格子的右边,移动splitter会左右移动它所在列的宽度分配。我们可以改变HorizontalAlignment为Left或Center,而保持VerticalAlignment为Stretch不变。
我们可以通过splitter的ResizeBehavior枚举属性,改变上述行为,让我们选择哪个列会被splitter影响:
CurrentAndNext 等效于splitter靠右
PreviousAndCurrent等效于splitter靠左
PreviousAndNext 等效于splitter居中
BasedOnAlignment 等效于由splitter的HorizontalAlignment和VerticalAlignment来决定
相应的,设置HorizontalAlignment为Stretch而VerticalAlignment为Top、Bottom或Center,从而使splitter为水平的。
我们可以利用ResizeDirection属性,改变splitter影响的方向,有三种枚举值:Auto、Columns、Rows。对于水平splitter,按理说应该是上下移动,但是如果把ResizeDirection属性设为Columns,
则可以左右移动splitter,但是splitter的效果就看不到了。