support for .NET framework 3.5

Still have bugs
This commit is contained in:
NaBian committed 2019-01-21 00:43:10 +08:00
1 parent 5878039e21
commit 7d6b491f25
704 files changed
+48273 -33

No files matched your search

@@ -0,0 +1,71 @@
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
namespace HandyControl.Interactivity
{
public class ExtendedVisualStateManager
{
internal static Rect GetLayoutRect(FrameworkElement element)
{
var actualWidth = element.ActualWidth;
var actualHeight = element.ActualHeight;
if (element is Image || element is MediaElement)
if (element.Parent is Canvas)
{
actualWidth = double.IsNaN(element.Width) ? actualWidth : element.Width;
actualHeight = double.IsNaN(element.Height) ? actualHeight : element.Height;
}
else
{
actualWidth = element.RenderSize.Width;
actualHeight = element.RenderSize.Height;
}
actualWidth = element.Visibility == Visibility.Collapsed ? 0.0 : actualWidth;
actualHeight = element.Visibility == Visibility.Collapsed ? 0.0 : actualHeight;
var margin = element.Margin;
var layoutSlot = LayoutInformation.GetLayoutSlot(element);
var x = 0.0;
var y = 0.0;
switch (element.HorizontalAlignment)
{
case HorizontalAlignment.Left:
x = layoutSlot.Left + margin.Left;
break;
case HorizontalAlignment.Center:
x = (layoutSlot.Left + margin.Left + layoutSlot.Right - margin.Right) / 2.0 - actualWidth / 2.0;
break;
case HorizontalAlignment.Right:
x = layoutSlot.Right - margin.Right - actualWidth;
break;
case HorizontalAlignment.Stretch:
x = Math.Max(layoutSlot.Left + margin.Left,
(layoutSlot.Left + margin.Left + layoutSlot.Right - margin.Right) / 2.0 - actualWidth / 2.0);
break;
}
switch (element.VerticalAlignment)
{
case VerticalAlignment.Top:
y = layoutSlot.Top + margin.Top;
break;
case VerticalAlignment.Center:
y = (layoutSlot.Top + margin.Top + layoutSlot.Bottom - margin.Bottom) / 2.0 - actualHeight / 2.0;
break;
case VerticalAlignment.Bottom:
y = layoutSlot.Bottom - margin.Bottom - actualHeight;
break;
case VerticalAlignment.Stretch:
y = Math.Max(layoutSlot.Top + margin.Top,
(layoutSlot.Top + margin.Top + layoutSlot.Bottom - margin.Bottom) / 2.0 - actualHeight / 2.0);
break;
}
return new Rect(x, y, actualWidth, actualHeight);
}
}
}