using System;
|
using System.Globalization;
|
using System.Windows;
|
using System.Windows.Data;
|
using System.Windows.Markup;
|
|
namespace Bro.Common.ImageCanvas
|
{
|
public class ZoomAndPanViewBoxClampConverter : MarkupExtension, IMultiValueConverter
|
{
|
public override object ProvideValue(IServiceProvider serviceProvider)
|
{
|
return this;
|
}
|
|
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
|
{
|
//NOTE: Cannot pass ExtentWidth or ExtentHeight as one of the values because it does not seem to update
|
var zoomAndPanControl = (ZoomAndPanControl)values[3];
|
if (values[0] == null || zoomAndPanControl == null) return DependencyProperty.UnsetValue;
|
var size = (double)values[0];
|
var offset = (double)values[1];
|
var zoom = (double)values[2];
|
return Math.Max((parameter?.ToString().ToLower() == "width")
|
? Math.Min(zoomAndPanControl.ExtentWidth / zoom - offset, size)
|
: Math.Min(zoomAndPanControl.ExtentHeight / zoom - offset, size), 0);
|
}
|
|
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
|
{
|
throw new NotImplementedException();
|
}
|
}
|
}
|