WPF控件内容自动缩放及放大镜
来源:互联网 发布:淘宝天下怎么样 编辑:程序博客网 时间:2024/06/14 17:29
一、内容缩放
1、布局
1、使用Grid的GridSplitter实现可拖拽分隔栏效果。当ShowsPreview设置为True时,拖拽过程中不会刷新(控件内容要等到鼠标释放时才变化);当ShowsPreview设置为False时,控件内容实时跟随变化。
2、使用ViewBox特性实现控件内容随拖拽自动变化。
3、布局代码:
<Grid> <Grid.RowDefinitions> <RowDefinition Height="40"/> <RowDefinition/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="100" MinWidth="50"/> <ColumnDefinition Width="Auto"/> <ColumnDefinition/> </Grid.ColumnDefinitions> <TextBox Text="Row-0 Column-0" Grid.ColumnSpan="3" BorderBrush="Black"/> <Viewbox Grid.Row="1"> <TextBox Text="Row-1 Column-1" BorderBrush="Black"/> </Viewbox> <Viewbox Grid.Row="1" Grid.Column="2"> <TextBox Text="Row-1 Column-2" BorderBrush="Black"/> </Viewbox> <GridSplitter Grid.Row="1" Grid.Column="1" VerticalAlignment="Stretch" HorizontalAlignment="Center" Width="10" Background="Red" ShowsPreview="False" /></Grid>
2、界面效果
1. 启动时界面:
2、拖拽后界面:
二、放大镜
1. 布局
<Grid Name="rootLayout"> <Grid Name="contextArea" PreviewMouseMove="contextArea_PreviewMouseMove" Background="Green"> <Image Source="Icons/mthumb1.jpg" Margin="0" Stretch="UniformToFill"/> </Grid> <Canvas> <Canvas Name="magnifierCanvas" IsHitTestVisible="False"> <Ellipse Width="150" Height="150" StrokeThickness="3" Fill="LightBlue" /> <!--为了看得清楚椭圆控件我再添加了一个一样大小的Ellipse重叠再一起, 将其背景颜色设置为LightBlue 当然你也可以不要这个Ellipse 可以删除--> <!--magnifierEllipse就是我们要填充的控件 就像上一个的Rectangle控件--> <Ellipse Width="150" Height="150" Name="magnifierEllipse"> <Ellipse.Fill> <VisualBrush x:Name="vb" Visual="{Binding ElementName=contextArea}" Stretch="UniformToFill" ViewboxUnits="Absolute" Viewbox="0, 25, 50, 50" ViewportUnits="RelativeToBoundingBox" Viewport="0, 0, 1, 1"> </VisualBrush> </Ellipse.Fill> </Ellipse> </Canvas> </Canvas> </Grid>
2. C#代码逻辑
private void contextArea_PreviewMouseMove(object sender, MouseEventArgs e) { Point rate = new Point(2, 2); Point pos = e.MouseDevice.GetPosition(rootLayout); //相对于outsideGrid 获取鼠标的坐标 Rect viewBox = vb.Viewbox; //这里的Viewbox和前台的一样 这里就是获取前台Viewbox的值 double xoffset=0; //因为鼠标要让它在矩形(放大镜)的中间 那么我们就要让矩形的左上角重新移动位置 double yoffset=0; xoffset = magnifierEllipse.ActualWidth / 2; yoffset = magnifierEllipse.ActualHeight / 2; viewBox.X = pos.X - xoffset + (magnifierEllipse.ActualWidth - magnifierEllipse.ActualWidth / rate.X)/2; viewBox.Y = pos.Y - yoffset + (magnifierEllipse.ActualHeight - magnifierEllipse.ActualHeight / rate.Y)/2; vb.Viewbox = viewBox; Canvas.SetLeft(magnifierCanvas, pos.X - xoffset); //同理重新定位Canvas magnifierCanvas的坐标 Canvas.SetTop(magnifierCanvas, pos.Y - yoffset); }
3. 运行效果
1 0
- WPF控件内容自动缩放及放大镜
- wpf内的控件缩放
- wpf放大镜
- wpf放大镜
- WPF 放大镜
- WPF控件之内容控件
- [前端] canvas进阶之图片缩放、水印及放大镜
- WPF图片控件的旋转、缩放、翻转
- wpf 设置控件 旋转,缩放 效果
- WPF图片控件的旋转、缩放、翻转
- MFC界面控件自动缩放
- WPF缩放
- 对话框内部控件自动缩放类
- 打印控件的自动缩放功能
- Android 实现图片自动缩放自定义控件
- Qt:让QML中的控件自动缩放
- 控件随窗口大小自动缩放
- 获取WPF所有控件的模板内容
- 证:最大化对数似然函数等价于最小化残差平方和
- hdu 4946 Area of Mushroom(凸包)
- Android SDK Manager 更新失败的解决方法
- 斯坦福大学IOS开发课程笔记(第九课)
- JavaMelody系统监控工具使用配置
- WPF控件内容自动缩放及放大镜
- 我的Android之路(1)--自学
- poj 1321 棋盘问题 【DFS】
- hdu-oj 1408 盐水的故事
- Linux任务调度crontab时间规则介绍
- win7快捷图标显示异常的解决方法
- linux与Tiny6410的交叉编译的过程
- 如何理解<base href="<%=basePath%>">
- hdu 1698 Just a Hook 区间修改,区间求和