1

在 WPF 应用程序中,我在背景上插入一个带有简单图片的按钮:

<Button Grid.Column="2" BorderBrush="Transparent" HorizontalAlignment="Left" Height="20" Margin="15,0,0,0" VerticalAlignment="Center" Width="20">
    <Button.Background>
       <ImageBrush ImageSource="Divalto_Rechercher_25px.png" Stretch="Uniform"></ImageBrush>
    </Button.Background>
</Button>

我想在鼠标悬停时转换图片的图片颜色。

这是鼠标不在时的图片:

在此处输入图像描述

当鼠标结束时,我想要这样的事情:

在此处输入图像描述

我想动态地执行此操作(动态地转换图片颜色)。

这是一个尝试,但不完整:

<Button Grid.Column="2" BorderBrush="Transparent" HorizontalAlignment="Left" Height="20" Margin="15,0,0,0" VerticalAlignment="Center" Width="20">
  <Button.Background>
    <ImageBrush ImageSource="appbar.feature.search.rest.png" Stretch="Uniform"></ImageBrush>
  </Button.Background> 
    <EventTrigger RoutedEvent="Button.MouseEnter">
        <BeginStoryboard>
            <Storyboard>
                <ColorAnimation
                    Storyboard.TargetName="AnimBrush" 
                    Storyboard.TargetProperty="(SolidColorBrush.Color)"
                    From="Red" To="Green" Duration="0:0:5" 
                    AutoReverse="True" RepeatBehavior="Forever" />
            </Storyboard>
        </BeginStoryboard>
    </EventTrigger>
</Button>

任何人都可以帮助我吗?

非常感谢,

此致,

4

3 回答 3

2

您可以只创建带有内部的Contentas a并更改使用 a或。如果您只想显示图像样式,则覆盖模板也是一个好主意,否则当鼠标悬停时您将获得按钮焦点样式。BorderImageBorder BackgroundTriggerAnimationButton

例子:

 <Button BorderBrush="Transparent" HorizontalAlignment="Left" Height="50" Margin="12,24,0,238" VerticalAlignment="Center" Width="51">
        <Button.Content>
            <Border CornerRadius="5">
                <Image Margin="3" Source="http://icons.iconarchive.com/icons/custom-icon-design/mini/32/Search-icon.png" Stretch="Uniform" />
                <Border.Style>
                    <Style TargetType="{x:Type Border}">
                        <Setter Property="Background" Value="LimeGreen" />
                        <Style.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter Property="Background" Value="Red" />
                            </Trigger>
                        </Style.Triggers>
                    </Style>
                </Border.Style>
            </Border>
        </Button.Content>
        <Button.Style>
            <Style TargetType="{x:Type Button}" >
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type Button}" >
                            <ContentPresenter />
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </Button.Style>
    </Button>

结果:

普通在此处输入图像描述鼠标悬停在此处输入图像描述

于 2013-02-18T20:54:12.703 回答
0

听起来您需要将 StoryBoard 添加到 XAML。如果你有一个透明的图像,为什么不简单地改变按钮的填充颜色呢?

我还没有测试过下面的代码,但它是你可以用作跳板的东西。

<EventTrigger RoutedEvent="Button.MouseOver">
      <BeginStoryboard>
        <Storyboard>
          <ColorAnimation
            Storyboard.TargetName="AnimBrush" 
            Storyboard.TargetProperty="(SolidColorBrush.Color)"
            From="Red" To="Green" Duration="0:0:5" 
            AutoReverse="True" RepeatBehavior="Forever" />
        </Storyboard>
      </BeginStoryboard>
 </EventTrigger>
于 2013-02-18T20:30:00.857 回答
0

为什么不直接将按钮内容设置为您想要的图像?这可能是最简单的方法。然后,您可以更改鼠标事件。看到这个答案

如果您的图像仅是白色放大镜,图像的其余部分是透明的,那么您应该将按钮内容设置为图像并将背景设置为您想要的颜色(橙色或黑色)

于 2013-02-18T19:44:28.273 回答