如何获取应用于WPF Viewbox的缩放系数

10

如果我们在使用保持内容原始宽高比的情况下,用WPF (Silverlight) Viewbox 并设置 Stretch="UniformToFill"Stretch="Uniform"那么我们如何获取当前应用于内容的缩放系数?

注意:我们并不总是知道内容的精确初始尺寸(例如它是一个带有许多内容的网格)。

1个回答

18
查看这个问题:在ViewBox中拉伸后获取项目的尺寸 基本上,如果你有一个名为viewbox的Viewbox,你可以像这样获取ScaleTransform
ContainerVisual child = VisualTreeHelper.GetChild(viewbox, 0) as ContainerVisual;
ScaleTransform scale = child.Transform as ScaleTransform;

您还可以为 Viewbox 创建一个扩展方法,可以像这样调用它。
viewbox.GetScaleFactor();

ViewBoxExtensions(视图框扩展)
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;
    }
}

1
给其他使用Silverlight的用户一个快速提示 - 尽管问题询问“WPF(Silverlight)”ViewBox,但解决方案不能直接用于Silverlight,因为它没有ContainerVisual类。 - dlanod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接