Browse Source

Magnifier: added new FrameType property which allows you to choose between a Circular or Rectangular magnifier.

pull/1645/head
brianlagunas_cp 15 years ago
parent
commit
58df15643c
  1. 10
      ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Magnifier/Implementation/FrameType.cs
  2. 86
      ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Magnifier/Implementation/Magnifier.cs
  3. 68
      ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Magnifier/Themes/Generic.xaml
  4. 1
      ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/WPFToolkit.Extended.csproj

10
ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Magnifier/Implementation/FrameType.cs

@ -0,0 +1,10 @@
using System;
namespace Microsoft.Windows.Controls
{
public enum FrameType
{
Circle,
Rectangle
}
}

86
ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Magnifier/Implementation/Magnifier.cs

@ -14,33 +14,69 @@ namespace Microsoft.Windows.Controls
{
get
{
return new Size(2 * Radius, 2 * Radius);
switch (FrameType)
{
case FrameType.Circle:
return new Size(2 * Radius, 2 * Radius);
case FrameType.Rectangle:
return new Size(Width, Height);
default:
return Size.Empty;
}
}
}
#endregion //DefaultSize
#region MagnifierWidth
#region FrameWidth
public static readonly DependencyProperty MagnifierWidthProperty = DependencyProperty.Register("MagnifierWidth", typeof(double), typeof(Magnifier), new UIPropertyMetadata(50.0));
internal double MagnifierWidth
public static readonly DependencyProperty FrameWidthProperty = DependencyProperty.Register("FrameWidth", typeof(double), typeof(Magnifier), new UIPropertyMetadata(50.0));
internal double FrameWidth
{
get { return (double)GetValue(MagnifierWidthProperty); }
set { SetValue(MagnifierWidthProperty, value); }
get { return (double)GetValue(FrameWidthProperty); }
set { SetValue(FrameWidthProperty, value); }
}
#endregion //MagnifierWidth
#region MagnifierHeight
#region FrameHeight
public static readonly DependencyProperty MagnifierHeightProperty = DependencyProperty.Register("MagnifierHeight", typeof(double), typeof(Magnifier), new UIPropertyMetadata(50.0));
internal double MagnifierHeight
public static readonly DependencyProperty FrameHeightProperty = DependencyProperty.Register("FrameHeight", typeof(double), typeof(Magnifier), new UIPropertyMetadata(50.0));
internal double FrameHeight
{
get { return (double)GetValue(MagnifierHeightProperty); }
set { SetValue(MagnifierHeightProperty, value); }
get { return (double)GetValue(FrameHeightProperty); }
set { SetValue(FrameHeightProperty, value); }
}
#endregion //MagnifierWidth
#endregion //FrameHeight
#region FrameType
public static readonly DependencyProperty FrameTypeProperty = DependencyProperty.Register("FrameType", typeof(FrameType), typeof(Magnifier), new UIPropertyMetadata(FrameType.Circle, OnFrameTypeChanged));
public FrameType FrameType
{
get { return (FrameType)GetValue(FrameTypeProperty); }
set { SetValue(FrameTypeProperty, value); }
}
private static void OnFrameTypeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
Magnifier m = (Magnifier)d;
m.OnFrameTypeChanged((FrameType)e.OldValue, (FrameType)e.NewValue);
}
protected virtual void OnFrameTypeChanged(FrameType oldValue, FrameType newValue)
{
if (newValue == Controls.FrameType.Circle)
{
Height = DefaultSize.Height;
Width = DefaultSize.Width;
}
ResolveViewBox();
}
#endregion //FrameType
#region Radius
@ -136,6 +172,8 @@ namespace Microsoft.Windows.Controls
static Magnifier()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(Magnifier), new FrameworkPropertyMetadata(typeof(Magnifier)));
HeightProperty.OverrideMetadata(typeof(Magnifier), new FrameworkPropertyMetadata(100.0));
WidthProperty.OverrideMetadata(typeof(Magnifier), new FrameworkPropertyMetadata(100.0));
}
public Magnifier()
@ -145,17 +183,37 @@ namespace Microsoft.Windows.Controls
#endregion
#region Base Class Overrides
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
if (FrameType == Controls.FrameType.Circle)
{
Height = DefaultSize.Height;
Width = DefaultSize.Width;
}
ResolveViewBox();
}
#endregion // Base Class Overrides
#region Methods
private void ResolveViewBox()
{
if (!IsInitialized)
return;
double correction = (BorderThickness.Bottom + BorderThickness.Left + BorderThickness.Right + BorderThickness.Top == 0) ? 1 : 0;
double width = DefaultSize.Width * ZoomFactor;
double height = DefaultSize.Height * ZoomFactor;
MagnifierWidth = DefaultSize.Width - correction;
MagnifierHeight = DefaultSize.Height - correction;
FrameWidth = DefaultSize.Width - correction;
FrameHeight = DefaultSize.Height - correction;
ViewBox = new Rect(ViewBox.Location, new Size(width, height));
}

68
ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Magnifier/Themes/Generic.xaml

@ -10,30 +10,54 @@
<magConverters:RadiusConverter x:Key="RadiusConverter"/>
<magConverters:BorderThicknessToStrokeThicknessConverter x:Key="BorderThicknessToStrokeThicknessConverter"/>
<ControlTemplate x:Key="CircleTemplate" TargetType="{x:Type local:Magnifier}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="{Binding Path=Radius, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource RadiusConverter}}"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="{Binding Path=Radius, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource RadiusConverter}}"/>
</Grid.RowDefinitions>
<Ellipse Width="{Binding Path=FrameWidth, RelativeSource={RelativeSource TemplatedParent}}"
Height="{Binding Path=FrameHeight, RelativeSource={RelativeSource TemplatedParent}}"
Fill="{TemplateBinding Background}"/>
<Ellipse Stroke="{Binding Path=BorderBrush, RelativeSource={RelativeSource TemplatedParent}}"
StrokeThickness="{Binding Path=BorderThickness, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource BorderThicknessToStrokeThicknessConverter}}">
<Ellipse.Fill>
<VisualBrush Viewbox="{Binding Path=ViewBox, RelativeSource={RelativeSource TemplatedParent}}"
ViewboxUnits="Absolute"
Visual="{Binding Path=Target, RelativeSource={RelativeSource TemplatedParent}}"/>
</Ellipse.Fill>
</Ellipse>
</Grid>
</ControlTemplate>
<ControlTemplate x:Key="RectangleTemplate" TargetType="{x:Type local:Magnifier}">
<Canvas Background="{TemplateBinding Background}"
Width="{Binding Path=FrameWidth, RelativeSource={RelativeSource TemplatedParent}}"
Height="{Binding Path=FrameHeight, RelativeSource={RelativeSource TemplatedParent}}">
<Rectangle Width="{Binding Path=Width, RelativeSource={RelativeSource TemplatedParent}}"
Height="{Binding Path=Height, RelativeSource={RelativeSource TemplatedParent}}"
Stroke="{Binding Path=BorderBrush, RelativeSource={RelativeSource TemplatedParent}}"
StrokeThickness="{Binding Path=BorderThickness, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource BorderThicknessToStrokeThicknessConverter}}">
<Rectangle.Fill>
<VisualBrush Viewbox="{Binding Path=ViewBox, RelativeSource={RelativeSource TemplatedParent}}" ViewboxUnits="Absolute"
Visual="{Binding Path=Target, RelativeSource={RelativeSource TemplatedParent}}"/>
</Rectangle.Fill>
</Rectangle>
</Canvas>
</ControlTemplate>
<Style TargetType="{x:Type local:Magnifier}">
<Setter Property="IsHitTestVisible" Value="False"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:Magnifier}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="{Binding Path=Radius, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource RadiusConverter}}"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="{Binding Path=Radius, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource RadiusConverter}}"/>
</Grid.RowDefinitions>
<Ellipse Width="{Binding Path=MagnifierWidth, RelativeSource={RelativeSource TemplatedParent}}" Height="{Binding Path=MagnifierHeight, RelativeSource={RelativeSource TemplatedParent}}" Fill="{TemplateBinding Background}"/>
<Ellipse Stroke="{Binding Path=BorderBrush, RelativeSource={RelativeSource TemplatedParent}}" StrokeThickness="{Binding Path=BorderThickness, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource BorderThicknessToStrokeThicknessConverter}}">
<Ellipse.Fill>
<VisualBrush Viewbox="{Binding Path=ViewBox, RelativeSource={RelativeSource TemplatedParent}}"
ViewboxUnits="Absolute"
Visual="{Binding Path=Target, RelativeSource={RelativeSource TemplatedParent}}"/>
</Ellipse.Fill>
</Ellipse>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="FrameType" Value="Circle">
<Setter Property="Template" Value="{StaticResource CircleTemplate}"/>
</Trigger>
<Trigger Property="FrameType" Value="Rectangle">
<Setter Property="Template" Value="{StaticResource RectangleTemplate}"/>
</Trigger>
</Style.Triggers>
</Style>
</ResourceDictionary>

1
ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/WPFToolkit.Extended.csproj

@ -208,6 +208,7 @@
<Compile Include="DateTimeUpDown\Implementation\DateTimeUpDown.cs" />
<Compile Include="DateTimeUpDown\Implementation\DateTimeParser.cs" />
<Compile Include="DropDownButton\Implementation\DropDownButton.cs" />
<Compile Include="Magnifier\Implementation\FrameType.cs" />
<Compile Include="MultiLineTextEditor\Implementation\MultiLineTextEditor.cs" />
<Compile Include="NumericUpDown\Implementation\DecimalUpDown.cs" />
<Compile Include="NumericUpDown\Implementation\DoubleUpDown.cs" />

Loading…
Cancel
Save