做这个的时候,我主要考虑窗口放大缩小,控件也要放大缩小,所以要用到比例来分配宽高。
后面就想到了用Grid来制作,3x3的规格,控件放在中间,而放大缩小就GridSplitter来实现,总而言之,拖拉和放大缩小都是通过修改ColumnDefinition的宽度和RowDefinition的高度。
ColumnDefinition columnDefinition = new ColumnDefinition();
columnDefinition.Width = new GridLength(xxx, GridUnitType.Star); // xxx设置你值,这里我们可以根据我们保存的数据来设置。
RowDefinition rowDefinition = new RowDefinition();
rowDefinition.Height = new GridLength(xxx, GridUnitType.Star); //同上
我是每个拖动出来的控件,绑定的Model里都会带有三行三列的宽高,初始可以都是1,然后我们要根据界面的ActualWidth
和ActualHeight,计算出实际占的像素宽高。
通过GridSplitter的LostMouseCapture事件,可以更新放大缩小后的比列
Private void GridSplitter_LostMouseCapture(object sender, MouseEventArgs e)
{
Grid grid = (sender as GridSplitter).Parent as Grid;
//这里可以保存你的宽高。(因为行列我没有通过双向绑定ÿ