- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果您尝试以下 XAML 代码,您会注意到一些奇怪的行为。
<Canvas Width="300" Height="300">
<Rectangle Canvas.Left="50" Canvas.Top="50" Width="100" Height="100"
Stroke="Blue" StrokeThickness="1"/>
<Canvas.RenderTransform>
<ScaleTransform CenterX="50" CenterY="50" ScaleX="2" ScaleY="2"/>
</Canvas.RenderTransform>
</Canvas>
蓝色矩形的左上角位于 Canvas 上的 50, 50 处。同样,ScaleTransform 的中心被指定为 50, 50。但是,您会注意到生成的缩放 Canvas 并不像我预期的那样将矩形的左上角置于中心。我的问题是,为什么不呢?如果这是 ScaleTransform 的预期行为,那有什么意义呢?
更新
这是我认为 ScaleTransform 正在做的事情:
Tx为平移值,Cx为原始中心,Sx为缩放因子。如您所见,结果应平移矩形“选择区域”以匹配视口(viewport)。除非它没有。
最佳答案
我刚刚尝试了这个 XAML,它确实像我期望的那样工作 ScaleTransform 工作。
设置缩放变换的“中心”属性并不是说:“把这个点放在我的控件的中心”。它只是说“缩放就好像这是中心”。在旋转变换(使用类似的概念)中更容易看到。
如果您使用 RotateTransform 设置相同的 Canvas ,并将中心设置为 (0, 0),则整个 Canvas 将围绕该点旋转。如果设置为(50, 50), Canvas 围绕矩形的左上角等旋转。
这也不会将矩形移动到 Canvas 的中心,它只是应用“from”变换的点。所以在缩放变换中,如果我的中心是 (0, 0),那么所有缩放都发生在底部和右侧。放在 (50, 50) 处,它在顶部和左侧变大了一点,但大部分仍然在底部和右侧。将它放在 (150, 150) 处,所有方向均等展开。
更新
我不确定反射(reflect)的实现,但这是另一种思考方式。 ScaleTransform 旨在简单地缩放控件。缩放不应涉及相对于彼此移动子元素(即平移),此运动对于获得您描述的行为是必要的。 “中心”变量只是转换的中心,它们不会影响元素相对于父元素的位置(尤其是在 Canvas 中,这些值是硬编码的。)
另外,所有的变换都是“渲染”变换,这意味着它只影响显示,底层控制保持不变。任何缩放操作都不能使位于父对象左上角的对象突然出现在中心。
更新 2我相信我看到最后的检查在做什么 :)。
要进行“居中”缩放变换,您需要调整坐标空间。矩阵 (IIRC) 中的缩放操作始终从“0,0”开始应用。根据MSDN ,“偏移量”属性:
The OffsetX property is so named because it specifies the amount to translate the coordinate space along the x-axis.
这显然不会平移任何控件,它只是调整变换的坐标空间。
更新 3再试一次...
我同意更改缩放中心会导致缩放不均匀,我什至可以想象左上角似乎位于缩放 Canvas 中间的场景。为此,我会尝试将中心放在另一个角落(250,250)。这将需要大量的反复试验才能找到您需要的确切点和比例因子。
话虽这么说,问题是问为什么发布的代码没有产生这个结果。我相信,如果您考虑“从中心缩放”的实际结果,很明显,象限 II 的任何缩放都不会导致象限 2 的点移近原点,它总是会移动更远(从我上面讨论的)。
澄清一下,我将“原点”放在 Canvas 的中心。
希望这是有道理的。如果我能澄清任何事情,请告诉我!
关于c# - 如何使用 ScaleTransform 缩放到任意中心点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22407993/
我有一个带有 H264 身份验证的 RTSP 流的 URL - MPEG-4 第 10 部分编解码器。 Lik 看起来像这样:rtsp://login:pass@xxx.xxx.xxx.xxx:557
我正在开发移动应用程序。现在,我将访问 token 放在SharedPrefences上。我想问一下SharedPrefences上的存储访问 token 是否安全?如果没有,最好的做法是在哪里放置访
一个 UITableView,它有 20 行的 UITableViewCell,每一行都有一个按钮,单击按钮我想将 UITableViewCell 放到 UITableView 的底部。 是否有任何委
我有这样的代码。我删掉了所有的细节,但是这个文本区域会在按下按钮后发生变化,而它所做的只是改变了文本区域。没有添加滚动。我什至尝试将滚动策略设置为始终,但它返回错误。此面板将添加到另一个带有 Bord
我想在 NSString 中有 src="字符。 但我不能这样做,因为 "是 Objective C 的一部分。 我想这样做: NSString * name = [ [NSString alloc]
非常新手的问题,我是 html 的新手,特别是 highcharts 的东西。所以首先,我制作了这个 test.php 来显示图表。 Highcharts Exampl
如何将我的 fab 放在我的 fragment 上?请帮助我收到错误,例如。 android.view.InflateException: Binary XML file line #13: Erro
我已经完成了一个unity的迷你游戏,名为“penguins_test”。我导出了 2 个文件: penguins_test.html penguins_test.unity3d 现在,我想使用 Go
有谁知道如何将 uiviewcontroller(或只是 View )添加到 cocos2d 层上? 最佳答案 是这样的: [[CCDirector sharedDirector].view addS
我知道您可以采取一些技巧,将 HTML 元素放在 Silverlight 应用程序的顶部,但这无法全屏显示。有没有办法在 Silverlight 应用程序中显示 html 页面? 最佳答案 http:
从 Golang 教程中我不清楚如何将 Golang 代码放到 Github 以便以后能够从 Github 将该代码作为包导入。 这是来自 Golang 教程 http://golang.org/do
我围绕 Pygame 构建了我的整个游戏,并想把它放到 Steam 上。最后我了解到我需要 OpenGL 支持才能运行 Steam 的叠加层。初始化显示的代码: screen = pygame.dis
我需要将已编译的 apk 文件复制到作业 artifats,以便在成功时能够直接从作业页面下载它。 现在我已经在文件夹 build/apk/MyProject-release.apk 中编译了 apk
我愿意在本地和 Heroku 上处理不同的设置。所以我在 settings.py 的末尾使用了这个导入: try: from local_settings import * except Im
我是安卓新手。这个问题是我尝试使用 Android 应用程序和 Web 服务的步骤中的一个阶段。我之前问过一个问题,在这里:Fail to connect android to web service
我是 Git 新手。我刚刚在我的计算机上创建了一个 Git 存储库。现在我想将该存储库连接到网站 (GitHub) 并将我的代码推送到那里。 我该怎么做?我有点熟悉......我必须以某种方式将在线代
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: How to use an existing database with an Android applic
如何在浏览器选项卡上显示标签名称? :( 帮我我想将我的标签显示为选项卡,有什么技巧吗? 技巧 - ABC 技巧 - 最佳答案 是的,您可以使用 在浏览器选项卡中显示标签名称 示例标题代码:
我需要 Tomcat 上的 JAX-WS 运行时。 把“jax-ws/lib/*”放到“tomcat/lib”里可以吗? 如果将 jax-ws/lib 放入 tomcat/lib,是否需要 Tomca
我已经在Win10系统中安装了hadoop-2.5.2和eclipse neon.1a,但是我把“hadoop-eclipse-plugin-2.5.2.jar”放到/eclipse/plugins后
我是一名优秀的程序员,十分优秀!