Ваш шаблон выглядит довольно минимальным, но я предполагаю, что вы только начинаете его использовать, однако это поможет вам начать использовать ScaleTransform, а не анимировать ширину.
ScaleTransform можно применить к свойству RenderTransform либо самой кнопки, либо только границы вашего шаблона. Это может быть TransformGroup , если вы хотите сделать больше, чем просто масштабирование (т.е. составное преобразование, состоящее из других преобразований, таких как Translate, Rotate, Skew), но для простоты и, например, для чего-то вроде применяет одно значение ScaleTransform к кнопке:
<Button Template="{StaticResource IconButton}" Name="btnExit">
<Button.RenderTransform>
<ScaleTransform ScaleX="1.0" ScaleY="1.0"></ScaleTransform>
</Button.RenderTransform>
<Image Source="Images/Exit.png" />
</Button>
или это, чтобы применить к Границе ControlTemplate:
<ControlTemplate x:Key="IconButton" TargetType="Button">
<Border Background="Blue" x:Name="render">
<Border.RenderTransform>
<ScaleTransform ScaleX="1.0" ScaleY="1.0"></ScaleTransform>
</Border.RenderTransform>
<ContentPresenter Height="80" Width="80" />
</Border>
...
...
Далее вы захотите изменить свой триггер MouseEnter, чтобы нацелиться на это свойство, а для ширины - на свойство ScaleX объекта ScaleTransform. Следующая раскадровка будет масштабировать кнопку 2,5 раза в направлении X (добавьте TargetName="render"
к <Storyboard...
, если вы решили применить преобразование к границе, а не к кнопке).
<EventTrigger RoutedEvent="Mouse.MouseEnter">
<BeginStoryboard>
<Storyboard TargetProperty="RenderTransform.ScaleX">
<DoubleAnimation To="2.5" Duration="0:0:0.2" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
Если бы вы использовали TransformGroup с несколькими преобразованиями, вы бы изменили значение TargetProperty на что-то вроде RenderTransform.(TransformGroup.Children)[0].ScaleX
, предполагая, что ScaleTransform является первым дочерним элементом группы.
Это должно заставить вас работать с тем, что вам нужно, и вы можете взять его там, где вы хотите ...
НТН