按钮上的 xaml(在控件模板中)中进行缩放变换以执行“缩放”操作
我有一个带有图像的按钮,其样式如下:
<ControlTemplate x:Key="IconButton" TargetType="Button">
<Border>
<ContentPresenter Height="80" Width="80" />
</Border>
<ControlTemplate.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<BeginStoryboard>
<Storyboard TargetProperty="Opacity">
<DoubleAnimation From="1" To="0.5" Duration="0:0:0.5" />
<DoubleAnimation From="0.5" To="1" Duration="0:0:0.5" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="Mouse.MouseEnter">
<BeginStoryboard>
<Storyboard TargetProperty="Width">
<DoubleAnimation From="80" To="95" Duration="0:0:0.2" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Cursor" Value="Hand"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
按钮如下:
<Button Template="{StaticResource IconButton}" Name="btnExit">
<Image Source="Images/Exit.png" />
</Button>
问题是当我的鼠标移过时宽度不会改变。 (或者至少 - 图像的宽度不......)
我相信有一个“比例”变换我可以用来放大按钮及其所有内容?我在这里该怎么做...?
谢谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您的模板似乎非常小,但我假设您刚刚开始使用它,但这将帮助您开始使用 ScaleTransform 而不是动画宽度。
ScaleTransform 可以应用于RenderTransform 按钮本身或边框的属性你的模板。如果您愿意,这可能是 TransformGroup不仅仅是缩放(即由其他变换组成的复合变换,例如平移、旋转、倾斜),而是为了保持简单,例如,如下所示将单个 ScaleTransform 值应用于按钮:
或将其应用于按钮ControlTemplate 的边框:
接下来,您需要更改 MouseEnter 触发器以定位该属性,而对于宽度,您需要定位 ScaleTransform 的 ScaleX 属性。以下故事板将在 X 方向将按钮缩放 2.5 倍(如果您选择将变换应用到,则将边框而不是按钮)。
TargetName="render"
添加到如果您要使用具有多个变换的 TransformGroup,则可以将 TargetProperty 值更改为类似 RenderTransform.(TransformGroup.Children)[0].ScaleX 的值(假设 ScaleTransform 是该组的第一个子级) 。
这应该能让你启动并运行你需要的东西,你可以从那里把它带到你想要的地方......
HTH
Your template seems to be pretty minimal but I'm assuming your only just getting started on it, however this will help you get started with using a ScaleTransform as opposed to animating the width.
The ScaleTransform can be applied to the RenderTransform property of either the Button itself or just the Border of your template. This could be a TransformGroup if you want to do more than just Scale (i.e. a composite transform consisting of other tranforms such as Translate, Rotate, Skew) but to keep it simple and for examples sake something like the following applies a single ScaleTransform value to the Button:
or this to apply to the Border of the ControlTemplate:
Next you will want to change your MouseEnter trigger to target that property and for width you will want to target the ScaleX property of the ScaleTransform. The following Storyboard will scale the Button 2.5 times in the X direction (add
TargetName="render"
to<Storyboard...
if you have chosen to apply the Transform to the Border as opposed to the Button).If you were to use a TransformGroup with a number of transforms you would change the TargetProperty value to something like
RenderTransform.(TransformGroup.Children)[0].ScaleX
assuming the ScaleTransform is the first child of the group.This should get you up and running with what you need and you can take it where you want from there...
HTH