Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WPF中修改按钮的图片颜色_C#_Wpf_Xaml_Shader - Fatal编程技术网

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

C# 在WPF中修改按钮的图片颜色,c#,wpf,xaml,shader,C#,Wpf,Xaml,Shader,在WPF应用程序中,我插入了一个按钮,背景上有一个简单的图片: <Button Grid.Column="2" BorderBrush="Transparent" HorizontalAlignment="Left" Height="20" Margin="15,0,0,0" VerticalAlignment="Center" Width="20"> <Button.Background> <ImageBrush ImageSource="D

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

有人能帮我吗

非常感谢


致以最诚挚的问候,

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


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

听起来您需要在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>

您只需将
内容创建为
边框
,内部带有
图像
,并使用
触发器或
动画
更改
边框
背景
。如果您只想显示图像样式,最好覆盖
按钮
模板,否则鼠标悬停时将获得Buuttons焦点样式

例如:

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

结果:


正常鼠标悬停

因为我可以通过编程更改颜色!这就是为什么我想变换我的图片:)如果你只想改变颜色,那么你必须通过WPF绘图来创建图像…除非图像只是放大镜,其余部分是透明的?Interresant!假设我的放大镜其余部分是透明的,我如何动态添加黑色和橙色?我刚刚更新了我的答案,以反映您需要做的事情是的,但我如何更改我的透明图片上的颜色请:)?谢谢:)我试着使用此代码,但颜色没有改变。我用我的代码编辑了第一篇文章,你能看一下吗?谢谢:)