通过拖动调整ChildWindow大小
思路:
在ChildWindow的右下脚放一个拖动标示 并在拖动的过程中 更改ChildWidow的height 和wight 为拖动图标的Canvas.height,Canvas.left 如果Canvas里面的 Grid 在拖动的过程中适当调整 Grid height Weight
图片:

Xaml:
<controls:ChildWindow x:Class="...."
Width="600" Height="400">
<Canvas x:Name="Root">
<Grid x:Name="LayoutRoot" Margin="0" Background="#FFD8E8FF" Height="353" Width="570">
........
</Grid>
<Image x:Name="Resizer" Width="10" Height="10" Canvas.Left="572" Canvas.Top="355" MouseLeftButtonDown="Resizer_MouseLeftButtonDown" MouseLeftButtonUp="Resizer_MouseLeftButtonUp" MouseMove="Resizer_MouseMove" Source="/Expert;component/Images/cmd.png" />
</Canvas>
</controls:ChildWindow>
cs:
private void Resizer_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
FrameworkElement fs = sender as FrameworkElement;
mousePostion = e.GetPosition(this);
IsMove = true;
if (null != fs)
{
fs.CaptureMouse();
fs.Cursor = Cursors.Hand;
fs.Opacity = 0.5;
}
}
private void Resizer_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
FrameworkElement fs = sender as FrameworkElement;
IsMove = false;
fs.ReleaseMouseCapture();
mousePostion.X = mousePostion.Y = 0;
fs.Cursor = null;
}
private void Resizer_MouseMove(object sender, MouseEventArgs e)
{
FrameworkElement fs = sender as FrameworkElement;
if (IsMove)
{
double deltaV = e.GetPosition(this).Y - mousePostion.Y;
double deltaH = e.GetPosition(this).X - mousePostion.X;
double newTop = deltaV + (double)fs.GetValue(Canvas.TopProperty);
double newLeft = deltaH + (double)fs.GetValue(Canvas.LeftProperty);
if (newTop + 44.0 > 0 && newLeft + 28.0 > 0)
{
fs.SetValue(Canvas.TopProperty, newTop);
fs.SetValue(Canvas.LeftProperty, newLeft);
this.Height = newTop + 45.0;
this.Width = newLeft + 28.0;
LayoutRoot.Height = newTop;
LayoutRoot.Width = newLeft;
}
mousePostion = e.GetPosition(this);
}
}
效果:

拖动:


浙公网安备 33010602011771号