WPF 简单一个画布框选案例
可以根据自身需求,自定义一个通过坐标范围识别被包含的内容的功能代码
<Grid x:Name="MyGrid" Background="AliceBlue" MouseLeftButtonDown="leftdownClick" MouseLeftButtonUp="leftupClick" MouseMove="MyGrid_MouseMove">
<Canvas Background="AliceBlue" x:Name="MapCanvas" Height="{Binding ElementName=MyGrid, Path=ActualHeight}" Width="{Binding ElementName=MyGrid, Path=ActualWidth}">
</Canvas>
</Grid>
public partial class Window1 : Window
{
private Point MyPointStart;
private Point MyPointEnd;
private bool MouseState=false;
Rectangle MapTrack = new Rectangle();
public Window1()
{
InitializeComponent();
this.MapCanvas.Children.Add(MapTrack);
}
private void leftdownClick(object sender, MouseButtonEventArgs e)
{
MyPointStart = Mouse.GetPosition(MyGrid);
MouseState = true;
System.Diagnostics.Trace.WriteLine(string.Format("开始坐标》》》 X:{0},Y:{1}", MyPointStart.X, MyPointStart.Y));
}
private void leftupClick(object sender, MouseButtonEventArgs e)
{
MyPointEnd = Mouse.GetPosition(MyGrid);
MouseState = false;
System.Diagnostics.Trace.WriteLine(string.Format("结束坐标》》》 X:{0},Y:{1}", MyPointEnd.X, MyPointEnd.Y));
}
private void MyGrid_MouseMove(object sender, MouseEventArgs e)
{
MyPointEnd = Mouse.GetPosition(MyGrid);
System.Diagnostics.Trace.WriteLine(string.Format("移动坐标》》》 X:{0},Y:{1}", MyPointEnd.X, MyPointEnd.Y));
if (MouseState)
{
Draw((MyPointEnd.Y - MyPointStart.Y), (MyPointEnd.X - MyPointStart.X));
}
}
public void Draw(double height,double width)
{
MapTrack.Stroke = new SolidColorBrush(Colors.LightGray);
MapTrack.Fill = new SolidColorBrush(Colors.LightGray);
MapTrack.Width = width;
MapTrack.Height = height;
Canvas.SetLeft(MapTrack, MyPointStart.X);
Canvas.SetTop(MapTrack, MyPointStart.Y);
}
}