如果我们在使用保持内容原始宽高比的情况下,用WPF (Silverlight) Viewbox
并设置 Stretch="UniformToFill"
或 Stretch="Uniform"
,那么我们如何获取当前应用于内容的缩放系数?
注意:我们并不总是知道内容的精确初始尺寸(例如它是一个带有许多内容的网格)。
如果我们在使用保持内容原始宽高比的情况下,用WPF (Silverlight) Viewbox
并设置 Stretch="UniformToFill"
或 Stretch="Uniform"
,那么我们如何获取当前应用于内容的缩放系数?
注意:我们并不总是知道内容的精确初始尺寸(例如它是一个带有许多内容的网格)。
Viewbox
,你可以像这样获取ScaleTransform
。ContainerVisual child = VisualTreeHelper.GetChild(viewbox, 0) as ContainerVisual;
ScaleTransform scale = child.Transform as ScaleTransform;
Viewbox
创建一个扩展方法,可以像这样调用它。viewbox.GetScaleFactor();
public static class ViewBoxExtensions
{
public static double GetScaleFactor(this Viewbox viewbox)
{
if (viewbox.Child == null ||
(viewbox.Child is FrameworkElement) == false)
{
return double.NaN;
}
FrameworkElement child = viewbox.Child as FrameworkElement;
return viewbox.ActualWidth / child.ActualWidth;
}
}