?WPF 如何實現簡單放大鏡
控件名:Magnifier
作 ? 者:WPFDevelopersOrg - 驚鏵
原文鏈接[1]:https://github.com/WPFDevelopersOrg/WPFDevelopers
框架使用
.NET40
;Visual Studio 2019
;實現此功能需要用到
VisualBrush
,放大鏡展現使用Canvas
->Ellipse
.可以使用
VisualBrush
創建放大效果。設置
Visual
獲取或設置畫筆的內容。設置
ViewboxUnits
Absolute
坐標系與邊界框無關。設置
Viewbox
獲取或設置TileBrush
圖塊中內容的位置和尺寸。
當鼠標移動獲取當前坐標點修改
VisualBrush
的Viewbox
。鼠標移動修改
Ellipse
的Canvas.Left
與Canvas.Top
跟隨鼠標。
1)
xaml
代碼如下:
<Grid><Image?Source="0.png"?Stretch="Fill"Name="image"?MouseMove="image_MouseMove"MouseEnter="image_MouseEnter"?MouseLeave="image_MouseLeave"/><Canvas?IsHitTestVisible="False"?Name="MagnifierPanel"><Ellipse?Stroke="LightBlue"?Name="MagnifierCircle"?Height="200"?Width="200"><Ellipse.Fill><VisualBrush?x:Name="MagnifierBrush"??Visual="{Binding?ElementName=image}"?ViewboxUnits="Absolute"/></Ellipse.Fill></Ellipse></Canvas></Grid>
2) xaml.cs
代碼如下:
private?void?image_MouseMove(object?sender,?MouseEventArgs?e){var?center?=?e.GetPosition(image);var?length?=?MagnifierCircle.ActualWidth?*?_factor;var?radius?=?length?/?2;var?viewboxRect?=?=?new?Rect(center.X?-?radius,?center.Y?-?radius,?length,?length);MagnifierBrush.Viewbox?=?viewboxRect;MagnifierCircle.SetValue(Canvas.LeftProperty,?center.X?-?MagnifierCircle.ActualWidth?/?2);MagnifierCircle.SetValue(Canvas.TopProperty,?center.Y?-?MagnifierCircle.ActualHeight?/?2);}private?void?image_MouseEnter(object?sender,?MouseEventArgs?e){MagnifierCircle.Visibility?=?Visibility.Visible;}private?void?image_MouseLeave(object?sender,?MouseEventArgs?e){MagnifierCircle.Visibility?=?Visibility.Hidden;}

參考資料
[1]
原文鏈接: https://github.com/WPFDevelopersOrg/WPFDevelopers