10

WPF(Silverlight)を使用する場合ViewboxStretch="UniformToFill"またはStretch="Uniform"コンテンツのネイティブアスペクト比を保持する場合、コンテンツに適用されている現在のスケーリング係数をどのように知ることができますか?

注:コンテンツの正確な初期サイズが常にわかっているわけではありません(たとえば、多くのものが含まれているグリッドです)。

4

1 に答える 1

18

この質問を参照してください: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;
    }
}
于 2011-03-24T19:32:12.613 に答える