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

rem*_*rem 8 silverlight wpf layout viewbox

如果我们使用WPF(Silverlight的)ViewboxStretch="UniformToFill"Stretch="Uniform"当它保持内容的原始宽高比,我们怎么能拿知道哪个被应用于内容的缩放的电流系数?

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

Fre*_*lad 16

请参阅此问题:获取ViewBox中项目的大小(在"拉伸"之后)

基本上,如果你有一个Viewbox被叫的视图框,你可以ScaleTransform这样做

ContainerVisual child = VisualTreeHelper.GetChild(viewbox, 0) as ContainerVisual;
ScaleTransform scale = child.Transform as ScaleTransform;
Run Code Online (Sandbox Code Playgroud)

您还可以创建一个Viewbox可以像这样调用的扩展方法

viewbox.GetScaleFactor();
Run Code Online (Sandbox Code Playgroud)

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;
    }
}
Run Code Online (Sandbox Code Playgroud)