All the controls missing in WPF. Over 1 million downloads.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

98 lines
2.7 KiB

using System;
using System.Windows;
using System.Windows.Documents;
using System.Windows.Input;
namespace Microsoft.Windows.Controls
{
public class MagnifierManager : DependencyObject
{
#region Members
private MagnifierAdorner _adorner;
private UIElement _element;
#endregion //Members
#region Properties
public static readonly DependencyProperty CurrentProperty = DependencyProperty.RegisterAttached("Magnifier", typeof(Magnifier), typeof(UIElement), new FrameworkPropertyMetadata(null, OnMagnifierChanged));
public static void SetMagnifier(UIElement element, Magnifier value)
{
element.SetValue(CurrentProperty, value);
}
public static Magnifier GetMagnifier(UIElement element)
{
return (Magnifier)element.GetValue(CurrentProperty);
}
private static void OnMagnifierChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
UIElement target = d as UIElement;
if (target == null)
throw new ArgumentException("Magnifier can only be attached to a UIElement.");
MagnifierManager manager = new MagnifierManager();
manager.AttachToMagnifier(target, e.NewValue as Magnifier);
}
#endregion //Properties
#region Event Handlers
void Element_MouseLeave(object sender, MouseEventArgs e)
{
HideAdorner();
}
void Element_MouseEnter(object sender, MouseEventArgs e)
{
ShowAdorner();
}
#endregion //Event Handlers
#region Methods
private void AttachToMagnifier(UIElement element, Magnifier magnifier)
{
_element = element;
_element.MouseEnter += Element_MouseEnter;
_element.MouseLeave += Element_MouseLeave;
magnifier.Target = _element;
_adorner = new MagnifierAdorner(_element, magnifier);
}
void ShowAdorner()
{
VerifyAdornerLayer();
_adorner.Visibility = Visibility.Visible;
}
bool VerifyAdornerLayer()
{
if (_adorner.Parent != null)
return true;
AdornerLayer layer = AdornerLayer.GetAdornerLayer(_element);
if (layer == null)
return false;
layer.Add(_adorner);
return true;
}
void HideAdorner()
{
if (_adorner.Visibility == Visibility.Visible)
{
_adorner.Visibility = Visibility.Collapsed;
}
}
#endregion //Methods
}
}