wpf - 在按钮上的xaml中缩放缩放转换(在控件模板中)以执行 “zoom”

标签 wpf image button zooming scaletransform

我有一个带有图像的按钮,它的样式如下:

<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>

问题是当鼠标移到上方时宽度不会改变。 (或者至少-图像的宽度不...)

我相信我可以使用“缩放”转换来放大按钮及其所有内容吗?我在这里怎么办...?

谢谢。

最佳答案

您的模板似乎很小,但是我假设您只是刚刚开始使用它,但是这将帮助您开始使用ScaleTransform而不是对宽度进行动画处理。

ScaleTransform可以应用于Button本身或模板的Border的RenderTransform属性。如果您想做的不只是Scale(即由其他变换组成的复合变换,例如Translate,Rotate,Skew),还可以做一个TransformGroup,但是为了保持简单,例如,以下示例将单个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触发器以将该属性作为目标,而对于宽度,您将以ScaleTransform的ScaleX属性作为目标。下面的 Storyboard 将在X方向上将Button缩放2.5倍(如果选择将Transform应用于Border而不是Button,则将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使用多个转换,则假定ScaleTransform是该组的第一个子级,则可以将TargetProperty值更改为RenderTransform.(TransformGroup.Children)[0].ScaleX之类的值。

这应该可以让您启动并运行所需的内容,然后可以从那里将其放置在所需的位置...

高温超导

关于wpf - 在按钮上的xaml中缩放缩放转换(在控件模板中)以执行 “zoom”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2604152/

相关文章:

c# - 将 ToggleButton 绑定(bind)到 boolean 值

c# - 为什么桌面图标与资源管理器图标不同?

wpf - 右对齐 wpf 扩展器标题中的项目

c# - 如何获得图像的分辨率? (JPEG、GIF、PNG、JPG)

html - 格式化 html 输入按钮以适合(垂直)具有 rowspan 的表格单元格

WPF 水平数据网格

python - 为什么openCV存储的文件比原始文件大(kB)?

javascript - 使用 jQuery 单击后禁用链接

button - 如何通过 gridcell 中的存储库按钮获取 xtragrid 行索引?

android - 在 Xaml 中将图像添加到按钮的背景