首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在WPF中修改按钮的图片颜色

在WPF中修改按钮的图片颜色
EN

Stack Overflow用户
提问于 2013-02-19 03:38:32
回答 3查看 6.2K关注 0票数 1

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

代码语言:javascript
复制
<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>

我想,在鼠标经过时,将图片的颜色转换为图片的颜色。

这是鼠标不在的时候的图片:

当鼠标结束时,我想要一个这样的东西:

我想要动态地这样做(动态地转换图片的颜色)。

下面是一次尝试,但还没有完成:

代码语言:javascript
复制
<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>

有谁能帮我吗?

非常感谢,

诚挚的问候,

EN

回答 3

Stack Overflow用户

发布于 2013-02-19 04:54:13

您可以将Content创建为一个内部带有ImageBorder,然后使用TriggerAnimation更改Border Background。如果你只是想显示图像样式,那么覆盖Button模板可能也是个好主意,否则当鼠标移到上方时,你会得到Buutton焦点样式。

示例:

代码语言:javascript
复制
 <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>

结果:

正常

MouseOver

票数 2
EN

Stack Overflow用户

发布于 2013-02-19 03:44:28

为什么不直接将按钮内容设置为您想要的图像呢?这可能是最简单的方法。然后,您只需更改鼠标事件即可。See this SO answer

如果你有一个只有白色放大镜的图像,而图像的其余部分是透明的,那么你应该将按钮内容设置为图像,并将背景设置为所需的颜色(橙色或黑色)。

票数 0
EN

Stack Overflow用户

发布于 2013-02-19 04:30:01

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

我还没有测试过下面的代码,但是你可以把它当做跳板。

代码语言:javascript
复制
<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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14944016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档