除1个控件外,是否可以对画布/网格上的所有内容进行ScaleTransform转换?

时间:2020-03-06 14:56:19  来源:igfitidea点击:

给定以下画布:

<Canvas>
    <Canvas.LayoutTransform>
        <ScaleTransform ScaleX="1" ScaleY="1" CenterX=".5" CenterY=".5" />
    </Canvas.LayoutTransform>
    <Button x:Name="scaleButton" Content="Scale Me" Canvas.Top="10" Canvas.Left="10" />
    <Button x:Name="dontScaleButton" Content="DON'T Scale Me" Canvas.Top="10" Canvas.Left="50" />
</Canvas>

当ScaleX和ScaleY更改时,是否可以缩放1个按钮,但不能缩放另一个按钮?

解决方案

不在XAML中。我们可以通过构建逆向转换并将其应用于不需要转换的对象来在代码中执行此操作。

如果想花哨的话,可以构建一个依赖项属性,该属性可以在XAML中添加到我们不希望通过任何父转换进行转换的任何对象。此依赖项属性将采用父级的转换,构建反向转换并将其应用于添加到其上的对象。

我们还可以重组元素,以使我们不想通过"画布"缩放的元素实际上并不是该"画布"的子元素。

<Canvas>
    <Canvas>
        <Canvas.LayoutTransform>
            <ScaleTransform ScaleX="1" ScaleY="1" CenterX=".5" CenterY=".5" />
        </Canvas.LayoutTransform>
        <Button x:Name="scaleButton" Content="Scale Me" Canvas.Top="10" Canvas.Left="10" />
    </Canvas>
    <Button x:Name="dontScaleButton" Content="DON'T Scale Me" Canvas.Top="10" Canvas.Left="50" />
</Canvas>