【问题标题】:WPF style to perform translation after scaling缩放后执行翻译的 WPF 样式
【发布时间】:2023-03-25 02:36:01
【问题描述】:

我有一个 Button 样式,我一直在 WPF 中开发,如 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 将与Button 关联的Image 缩放到按钮所在区域的左上角(即,它重新缩放到按钮的 0,0 坐标,或者至少,这就是我假设)。

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

【问题讨论】:

    标签: wpf styles translate


    【解决方案1】:

    要通过中心进行缩放,您可以在触发器中添加:

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

    【讨论】:

      【解决方案2】:

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

      RenderTransformOrigin="0.5,0.5"
      

      【讨论】:

      • 如果需要,您还可以在 ScaleTransform 上设置 CenterX 和 CenterY 值,但这不适用于所有尺寸的按钮。
      • 谢谢!我不得不向 gcores 给出答案,因为他给了我完整的代码来发射水果鱼雷并让它继续前进。
      • 没关系...我想过将原点放在 setter 中,但认为您可能不希望它放在那里。如果您希望变换原点影响所有变换,而不仅仅是触发的变换,则需要在按钮本身上设置原点。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-17
      • 1970-01-01
      • 1970-01-01
      • 2016-04-08
      • 1970-01-01
      • 2022-01-10
      相关资源
      最近更新 更多