gpt4 book ai didi

wpf - 在 Control 或 UIElement 上找到应用的 ScaleTransform?

转载 作者:行者123 更新时间:2023-12-04 15:44:59 25 4
gpt4 key购买 nike

我的窗口中某处有一个控件。在这个窗口的根部是一个名为 MainGrid 的网格。我在 MainGrid 的 LayoutTransform 上应用了一个 ScaleTransform,当窗口大小增加时,我用它来放大窗口的所有内容。但是,我的一个控件在其 Canvas 上使用BitmapCache 来优化绘图性能。 BitmapCache 不考虑任何可能应用于控件的 ScaleTransform,因此如果我放大,控件会显得模糊。

BitmapCache 确实有一个 RenderAtScale 属性,我可以使用它来增加缓存图像的比例。但是,我遇到的问题是我不知道有一种优雅的方法来找出 Scale 值需要是什么。现在,我的控件上有一个属性,以便我的 Window 可以将其比例值传递给控件。但是,如果我不需要依赖某些外部源传入比例值,我会喜欢它。

有什么方法可以让控件获得应用到它的所有 ScaleTransforms 的摘要?

最佳答案

您可以使用 PresentationSourceRootVisual 来计算元素的总变换。找到在 parent 和 child 之间应用的比例的一般模式是

Visual child = /* some visual */ this;
Visual parent = PresentationSource.FromVisual(child).RootVisual;

// calculate the transform needed to go from the parent to the child coordinate spaces
var childTransform = parent.TransformToDescendant(child);

// use the transform to scale a 1x1 rectangle
// use Inverse as the transform is from Parent coordinates to child, we want
// child to parent
var unitRect = new Rectangle(0, 0, 1, 1);
var transformedUnit = childTransform.Inverse.TransformBounds(unitRect);

// transformedUnit.Width and transformedUnit.Height are now the scale factors (X and Y)
Debug.Assert(transformedUnit.Width == 0.25 && transformedUnit.Height == 0.25);

关于wpf - 在 Control 或 UIElement 上找到应用的 ScaleTransform?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5131118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com