wpf canvas移动
WPF 移动 Canvas
2023-09-14 09:10:46 时间
<Border Name="outside" Grid.Column="1" Background="LightBlue"
PreviewMouseDown="outsidewrapper_PreviewMouseDown"
PreviewMouseMove="outsidewrapper_PreviewMouseMove"
PreviewMouseUp="outside_PreviewMouseUp"
PreviewMouseWheel="outside_PreviewMouseWheel"
ClipToBounds="True">
<Canvas Name="inside" Width="{Binding Path=ActualWidth,RelativeSource={RelativeSource AncestorType=Border}}"
Height="{Binding Path=ActualHeight,RelativeSource={RelativeSource AncestorType=Border}}">
<Canvas.RenderTransform>
<TransformGroup/>
</Canvas.RenderTransform>
<Line Canvas.Left="50" Canvas.Top="50" X1="100" Y1="200" X2="100" Y2="200" Stroke="Black" StrokeThickness="5"/>
<Rectangle Canvas.Left="150" Canvas.Top="150" Width="380" Height="296" Fill="Red" />
</Canvas>
</Border>
private Point previousPoint;
private bool isTranslateStart = false;
private void outside_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed&&e.RightButton== MouseButtonState.Released)
{
previousPoint = e.GetPosition(outside);
isTranslateStart = true;
}
}
private void outside_PreviewMouseMove(object sender, MouseEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed && e.RightButton == MouseButtonState.Released)
{
if (isTranslateStart)
{
Point curPoint = e.GetPosition(outside);
Vector v = curPoint - previousPoint;
TransformGroup t = inside.RenderTransform as TransformGroup;
if (t == null)
t = new TransformGroup();
t.Children.Add(new TranslateTransform(v.X, v.Y));
inside.RenderTransform = t;
previousPoint = curPoint;
}
}
e.Handled = true;
}
private void outside_PreviewMouseUp(object sender, MouseButtonEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed && e.RightButton == MouseButtonState.Released)
{
if (isTranslateStart)
{
isTranslateStart = false;
}
}
e.Handled = true;
}
private void outside_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
Point curPoint = e.GetPosition(outside);
TransformGroup tg = inside.RenderTransform as TransformGroup;
if (tg == null)
tg = new TransformGroup();
double s = ((double)e.Delta) / 1000.0 + 1.0;
tg.Children.Add(new ScaleTransform(s, s, curPoint.X, curPoint.Y));
e.Handled = true;
}
相关文章
- WPF是什么_wpf documentviewer
- WPF怎么做新手引导界面?
- WPF常用UI库和图表库(MahApps、HandyControl、LiveCharts)
- C# WPF DataGrid下面 使用CheckBox 选中事件
- WPF 属性变动后的业务处理及恢复原始值的方法
- WPF 修复 ContextMenu 在开启 PerMonitorV2 后所用 DPI 错误
- WPF 使用 Skia 解析绘制 SVG 图片
- WPF 动态更换模板详解编程语言
- 防止WPF应用程序MySQL注入漏洞的预防措施(wpfmysql防注入)
- WPF与MSSQL携手,让你实现数据服务管理梦想!(wpf mssql)
- WPF实现MySQL数据库的连接和操作(wpf 连接mysql)
- WPF技术实现MySQL数据的完美连接(wpf 连接mysql)
- 关于WPF使用MultiConverter控制Button状态的详细介绍
- 深入分析WPF客户端读取高清图片卡以及缩略图的解决方法详解