Как применить коэффициент масштабирования WPF Viewbox

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

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


person rem    schedule 24.03.2011    source источник


Ответы (1)


См. этот вопрос: Получить размер (после того, как он был растянут) элемента в ViewBox

По сути, если у вас есть Viewbox с именем viewbox, вы можете получить ScaleTransform вот так

ContainerVisual child = VisualTreeHelper.GetChild(viewbox, 0) as ContainerVisual;
ScaleTransform scale = child.Transform as ScaleTransform;

Вы также можете создать метод расширения для Viewbox, который вы можете вызывать следующим образом

viewbox.GetScaleFactor();

Расширения ViewBox

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;
    }
}
person Fredrik Hedblad    schedule 24.03.2011
comment
Небольшое примечание для других пользователей Silverlight: несмотря на то, что вопрос касается WPF (Silverlight) ViewBox, решение не работает для Silverlight, поскольку у него нет класса ContainerVisual. - person dlanod; 05.07.2011
comment
Спасибо. Мне очень помогает. - person Ievgen Naida; 23.08.2013