WPF控件内容自动缩放及放大镜
2014-08-15 09:14
465 查看
一、内容缩放
1、布局
1、使用Grid的GridSplitter实现可拖拽分隔栏效果。当ShowsPreview设置为True时,拖拽过程中不会刷新(控件内容要等到鼠标释放时才变化);当ShowsPreview设置为False时,控件内容实时跟随变化。
2、使用ViewBox特性实现控件内容随拖拽自动变化。
3、布局代码:
2、界面效果
1. 启动时界面:
2、拖拽后界面:
二、放大镜
1. 布局
2. C#代码逻辑
3. 运行效果
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. 运行效果
相关文章推荐
- 自动适应输入内容宽度的TextBox控件
- 对 自动适应文本内容的文本框控件 的完善 推荐
- Wap页面控件自动缩放
- TextBox控件怎么根据内容自动变化高度
- Winform中的DataGridView控件内容自动保存《转载》
- 自动适应输入内容高度的TextBox控件(摘自罗永浩全集)
- PowerBuilder9.0窗体控件自动缩放的实现
- WPF从我炫系列3---内容控件的用法
- [WPF]根据内容自动设置大小的RichTextBox
- 弹出下拉编辑控件,跟踪输入内容自动过滤查询,过滤条件完全自定义,支持TextBox,支持DataGridView(弹出查询对话框),支持DevExpress 8.2的TextEdit,Gridview
- 重点推荐:VB6.0 自动缩放窗体内控件的类代码
- WPF自动完成控件
- WPF and Silverlight 学习笔记(十一):WPF控件内容模型
- 自动适应输入内容高度的TextBox控件 (转)
- 窗体缩放自动改变内容宽度
- 自动适应文本内容的文本框控件(winform) 推荐
- 控件随窗体自动缩放大小(c#2005)
- 如何用js控件div的滚动条,让它在内容更新时自动滚到底部?
- C#实现控件随窗体拖动而自动缩放其大小
- [WPF - 之一问一答系列] 如何从WPF的WebBrowser控件中获得WebResponse内容?为何WebBrowser控件的Navigated事件参数NavigationEventArgs的WebResponse属性始终为null?