2011-03-24 34 views
8

如果一個WPF Viewbox控件係數我們使用WPF(Silverlight的)ViewboxStretch="UniformToFill"或者當它保留了內容的原始寬高比Stretch="Uniform"我們怎麼能拿知道它們應用到縮放的電流係數內容?如何獲得的縮放應用

注意:我們並不總是知道內容的確切初始尺寸(例如,它是一個包含大量內容的網格)。

回答

13

看到這個問題: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,你可以調用像這樣

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

太好了,謝謝! +1 – rem 2011-03-24 19:41:28

+1

只需向其他Silverlight用戶快速提示一下即使該問題詢問「WPF(Silverlight)」ViewBox,該解決方案也無法像Silverlight那樣工作,因爲它沒有ContainerVisual類。 – dlanod 2011-07-04 23:06:24

+0

謝謝。幫助我很多。 – Evgeny 2013-08-23 16:14:55