什么是ScaleTransform?它有什么作用?

3
为什么我应该使用ScaleX="2"而不是直接将控件宽度加倍?
<Button Width = "100" Content="Button1"/>


<Button Width = "50" Content="Button2">
   <Button.RenderTransform>
      <ScaleTransform ScaleX="2" />
   </Button.RenderTransform>
</Button>

两个按钮看起来完全一样,那么什么比例尺是好的呢?


有很多情境非常实用。例如,我目前正在使用一个画布创建一个地图服务器,画布最初的大小为512x512。每次我“缩放”时,我会将ScaleTransforms ScaleX和ScaleY加倍,并在我缩放到的点处加载新的(较小的)图像,在最深的缩放级别上,我将它们一直升级到2097152/2097152,这样就可以完美地运行,没有任何滞后。 - Fredrik Hedblad
3个回答

3
你对"完全相同"的概念似乎与我的不同。

Screenshot

你指定的 WidthHeight 决定了控件在布局中所占用的空间大小,这意味着控件可能会占用更多或更少的空间,但字体大小保持不变。 RenderTransform 是在此基础上进行的操作,它不再涉及布局,因此可能会扭曲控件。

渲染变换不会重新生成布局大小或渲染大小信息。渲染变换通常用于为元素添加临时效果或动画效果。例如,当元素聚焦或鼠标悬停时,该元素可能会缩放,或者在加载时可能会抖动,以吸引用户界面(UI)的注意。


另请参阅LayoutTransform属性,该属性会影响布局但仍会扭曲控件。

但是,使用图像代替按钮呢?这样你根本看不出任何区别。因此,在使用Image对象时,使用缩放和更改宽度和高度之间是否有任何区别? - yanivps
即使使用图像,在默认设置下也会看到差异,因为图像控件避免了拉伸,如果应用非均匀比例缩放变换,则会发生拉伸。请参阅属性的相关文献,它们解释了其用途。 - H.B.

2

当您无法缩放控件的某些部分时,这将非常有用。考虑DatePicker控件。默认实现具有一个下拉式日历,但对于我的用户来说太小了,因此我在App.xaml文件中引入了以下XAML代码片段:

<Style TargetType="w:DatePicker">
    <Setter Property="CalendarStyle">
        <Setter.Value>
            <Style TargetType="w:Calendar">
                <Setter Property="LayoutTransform">
                    <Setter.Value>
                        <ScaleTransform ScaleX="1.5" ScaleY="1.5" />
                    </Setter.Value>
                </Setter>
            </Style>
        </Setter.Value>
    </Setter>
</Style>

现在日历的大小增加了1.5倍,我的用户很满意。没有直接设置“CalendarWidth”或“CalendarHeight”的属性,因此ScaleTransform派上了用场。


2
如果涉及到复杂的路径/几何图形,或者甚至是一组控件,那该怎么办呢?您肯定不想手动更改每一个控件。如果您有一个自定义控件,希望一个实例的大小为100x100,另一个实例为150x150,那该怎么办呢?如果您正在实现缩放功能(比如谷歌地图),又该怎么办呢?
简而言之,对于您特定的示例来说,这并没有太多用处。但在许多其他情况下,它确实非常有用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接