Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.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# 以XAML格式更改PNG的透明度显示颜色_C#_Wpf_Xaml - Fatal编程技术网

C# 以XAML格式更改PNG的透明度显示颜色

C# 以XAML格式更改PNG的透明度显示颜色,c#,wpf,xaml,C#,Wpf,Xaml,我有一些透明的PNG,我在WPF/C#应用程序中用于按钮。 现在我有两个版本的PNG,一个用于普通视图,一个用于悬停,每个都有不同的颜色。然而,我真的很想有一个单一的PNG,并可能使一切不是透明的白色(每个图像都是一种颜色,没有细节,除了形状)。 然后,是否可以使用SolidColorBrush或类似工具更改每个组件的颜色,并在我的XAML中创建普通/悬停版本作为静态资源? 大概是这样的: <Image Key="BtnMenu" Source="Images/Menu.png" Fill

我有一些透明的PNG,我在WPF/C#应用程序中用于按钮。 现在我有两个版本的PNG,一个用于普通视图,一个用于悬停,每个都有不同的颜色。然而,我真的很想有一个单一的PNG,并可能使一切不是透明的白色(每个图像都是一种颜色,没有细节,除了形状)。 然后,是否可以使用SolidColorBrush或类似工具更改每个组件的颜色,并在我的XAML中创建普通/悬停版本作为静态资源? 大概是这样的:

<Image Key="BtnMenu" Source="Images/Menu.png" Fill="ButtonNormalBrush" />
<Image Key="BtnMenuHover" Source="Images/Menu.png" Fill="ButtonHoverBrush" />

是的,我完全虚构了“填充”这件事。。。 但基本的想法是,我有一个ResourceDictionary,它包含整个应用程序中使用的颜色方案,这样我就可以在一个位置更改应用程序中使用的大约6种颜色中的任何一种,并在每个引用该颜色的控件上进行更新……但我无法做到的一点是,这些颜色对应于e按钮。(理想情况下,在未来,我将使ResourceDictionary在运行时可以加载,以使应用程序具有备用“皮肤”。但现在PNG阻止我这样做)


编辑:顺便说一句,如果解决方案需要转换器或用代码编写的东西,那完全可以。

您可以尝试在悬停图像上应用a作为,或者创建一个用于转换图像的。另一种可能是将此类逻辑封装在
图像的子类中。

嗯…如果您创建了网格,则把图像放在网格内,你可以把网格的背景设置成你的填充颜色

编辑:以下是一些代码:

<Button>
    <Grid Background="SkyBlue">
        <Image Source="img.png" Stretch="None" />
    </Grid>
</Button>

有一个解决方案:
您只需从另一个ImageSource使用新的Format对象创建ImageSource即可。Format对象指定图像的颜色掩码。

我对WPF很在行,但对它来说还是相当陌生的……请举个例子。@AdamHaile:如果您想转换可以使用的像素,我真的不能给您举个例子,因为使用起来很痛苦,而且它取决于在你的文件格式上,我已经多年没有使用过它了。引用“将所有不透明的东西都变成白色”这个问题。你的回答不符合这个要求。哎呀,我觉得自己很笨。我唯一能想到的就是使用几何图形,而忘记PNG。但这可能太复杂了。