Как получить коэффициент масштабирования WPF Viewbox - PullRequest
8 голосов
/ 24 марта 2011

В случае, если мы используем WPF (Silverlight) Viewbox с Stretch="UniformToFill" или Stretch="Uniform", когда он сохраняет собственное соотношение сторон контента, как мы можем узнать текущий коэффициент масштабирования, который был применен к контенту?

Примечание: мы не всегда знаем точные начальные размеры контента (например, это Grid с большим количеством вещей в нем).

1 Ответ

15 голосов
/ 24 марта 2011

См. Этот вопрос: Получите размер (после того, как он был "растянут") элемента в 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;
    }
}
...