通过拖动调整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);

 

}

}

效果:

拖动:

posted @ 2010-03-03 16:24  3.mu  阅读(549)  评论(0)    收藏  举报