Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获得应用的WPF Viewbox缩放系数_Wpf_Silverlight_Layout_Viewbox - Fatal编程技术网

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

如何获得应用的WPF Viewbox缩放系数,wpf,silverlight,layout,viewbox,Wpf,Silverlight,Layout,Viewbox,如果我们将WPF(Silverlight)Viewbox与Stretch=“UniformToFill”或Stretch=“Uniform”一起使用,当它保留内容的本机纵横比时,我们如何知道应用于内容的当前缩放系数? 注意:我们并不总是知道内容的确切初始尺寸(例如,它是一个包含大量内容的网格)。请参见以下问题: 基本上,如果您有一个名为Viewbox的Viewbox,您可以像这样得到ScaleTransform ContainerVisual child = VisualTreeHelper.G

如果我们将WPF(Silverlight)
Viewbox
Stretch=“UniformToFill”
Stretch=“Uniform”
一起使用,当它保留内容的本机纵横比时,我们如何知道应用于内容的当前缩放系数?

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

请参见以下问题:

基本上,如果您有一个名为Viewbox的
Viewbox
,您可以像这样得到
ScaleTransform

ContainerVisual child = VisualTreeHelper.GetChild(viewbox, 0) as ContainerVisual;
ScaleTransform scale = child.Transform as ScaleTransform;
viewbox.GetScaleFactor();
您还可以为
Viewbox
创建一个扩展方法,您可以这样调用它

ContainerVisual child = VisualTreeHelper.GetChild(viewbox, 0) as ContainerVisual;
ScaleTransform scale = child.Transform as ScaleTransform;
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;
    }
}

给其他Silverlight用户一个简短的提示-尽管问题是关于“WPF(Silverlight)”视图框的,但解决方案并没有像Silverlight那样工作,因为它没有ContainerServiceSual类。谢谢。这对我很有帮助。