是否有可能ScaleTransform Canvas / Grid上的所有内容除了1 Control之外?

时间:2008-09-30 18:23:08

标签: wpf

给出以下画布:

<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个按钮,而不能缩放另一个按钮?

3 个答案:

答案 0 :(得分:9)

不在XAML中。您可以通过构建反向变换并将其应用于您不想变换的对象来在代码中执行此操作。

如果你想要花哨,你可以构建一个依赖属性,你可以在XAML中将它附加到你不希望被任何父变换转换的任何对象。此依赖项属性将采用父变换,构建反向变换并将其应用于它所附加的对象。

答案 1 :(得分:6)

当你问这个问题时,不确定这是不可能的,但我会这样做:

<Button x:Name="dontScaleButton" Content="DON'T Scale Me" Canvas.Top="10" Canvas.Left="50"
        LayoutTransform="{Binding LayoutTransform.Inverse,
                                  RelativeSource={RelativeSource AncestorType=Canvas}}"/>

原始变换似乎仍然对按钮产生了转换效果。

答案 2 :(得分:3)

您还可以重新构建元素,以便您不希望使用Canvas缩放的元素实际上不是Canvas的子元素。

<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>