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

时间:2011-03-24 17:51:27

标签: wpf silverlight layout viewbox

如果我们使用WPF(Silverlight)ViewboxStretch="UniformToFill"Stretch="Uniform"保留内容的原始宽高比,我们怎样才能知道当前的缩放系数被应用于内容?

注意:我们并不总是知道内容的确切初始尺寸(例如,它是一个包含大量内容的网格)。

1 个答案:

答案 0 :(得分:15)

请参阅此问题:Get the size (after it has been "streched") of an item in a 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;
    }
}