WPF样式在缩放后执行转换

时间:2009-04-16 18:54:29

标签: wpf styles translate

我已经在WPF中开发了Button样式,如this question中所述。我想用这种风格做的另一件事就是让Button缩小一点,让它看起来像点击它时点击一样。现在,转换代码如下所示:

<Trigger Property="IsPressed" Value="True">
    <Setter Property="RenderTransform">
        <Setter.Value>
            <TransformGroup>
                <ScaleTransform ScaleX="0.98" ScaleY="0.98"/>
                <SkewTransform AngleX="0" AngleY="0"/>
                <RotateTransform Angle="0"/>
                <TranslateTransform X="0" Y="0"/>
            </TransformGroup>
        </Setter.Value>
    </Setter>
    <Setter Property="Button.BitmapEffect">
        <Setter.Value>
            <OuterGlowBitmapEffect GlowColor="Green" GlowSize="10"></OuterGlowBitmapEffect>
        </Setter.Value>                                
    </Setter>
</Trigger>

所以,这很令人兴奋。问题是,ScaleTransform将与Image相关联的Button缩放到按钮所在区域的左上角(即,它会重新缩放到按钮的0,0坐标,或者至少,这就是我的假设)。

我对TranslateTransform的理解是它在像素坐标中,而不是相对于对象大小的坐标。如果我输入0.01 {0.01的TranslateTransform,那么它将在{x}和x中移动Button 0.01像素,而不是在每个方向上移动0.01 * sizeof(imagedimension)像素。我怎样才能得到相对变换,我怎样才能将它作为一种风格发生,也就是说,我不必为每个不同的Button尺寸做不同的数学运算?

2 个答案:

答案 0 :(得分:2)

要缩放整个中心,您可以添加触发器:

<Setter Property="RenderTransformOrigin" Value=".5,.5"/>

答案 1 :(得分:1)

您需要将Button上的RenderTransformOrigin设置为0.5 x 0.5:

RenderTransformOrigin="0.5,0.5"