2009-04-16 4 views
2

У меня есть стиль Button, который я разрабатывал в WPF, как указано в this question. Еще одна вещь, которую я хотел бы сделать с этим стилем, состоит в том, чтобы уменьшить размер окна Button, чтобы он выглядел так, как будто его щелкают по клику. Сейчас код преобразования выглядит так:Стиль WPF для перевода после масштабирования

<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 заключается в том, что оно находится в пиксельных координатах, а не в координатах относительно размера объекта. Если я положил TranslateTransform из 0,01, 0,01, то он переместит Button на 0,01 пикселя как в x, так и в y, а не на 0,01 * sizeof (imagedimension) пикселей в каждом направлении. Как я могу получить это относительное преобразование и как он может произойти как стиль, т. Е. Мне не нужно делать разные математические данные для каждого другого размера Button, который у меня есть?

ответ

2

Для масштабирования через центр вы можете добавить в ваш триггер:

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

, который получил это, потрясающий! – mmr

1

Вы должны установить RenderTransformOrigin на кнопку 0.5 на 0.5:

RenderTransformOrigin="0.5,0.5" 
+0

Вы также можете установить CenterX и Значения CenterY в ScaleTransform, если вы хотите, но это не работает для кнопок всех размеров. –

+0

спасибо! Я должен был дать ответ на gcores, потому что он дал мне полный код, чтобы стрелять торпедами фруктонов и сделать так. – mmr

+0

Это прекрасно ... Я думал о том, чтобы поместить происхождение в сеттер, но думал, что вы, возможно, не захотите его там. Если вы хотите, чтобы происхождение преобразования влияло на ВСЕ преобразования, а не только на запуск, вам нужно будет установить начало координат на самой кнопке. –

 Смежные вопросы

  • Нет связанных вопросов^_^