我该如何在WPF(使用MVVM)中为图像添加色彩,而不会牺牲性能?完全采用XAML的方案最理想,因为在代码中修改位图将导致大量变化图像的性能下降。但由于图像不仅由简单的形状构成,因此无法使用路径来实现这一点。
OpacityMask
来限制颜色填充的区域。OpacityMask主要用于路径,但它可以接受任何类型的画刷,包括ImageBrush
。这意味着你可以将图像作为有色填充的"模板"。叠加和遮罩之后
<Image
Source="{Binding MyImage}"
Width="150"
Height="150" />
<Rectangle Width="150" Height="150">
<Rectangle.Fill>
<SolidColorBrush Color="{Binding Color}"/>
</Rectangle.Fill>
<Rectangle.OpacityMask>
<ImageBrush ImageSource="{Binding MyImage}"/>
</Rectangle.OpacityMask>
</Rectangle>
要像我一样将颜色绑定到画刷上,请使用ColorToBrushConverter。
<Rectangle.Fill><SolidColorBrush Color="{Binding Color}"/></Rectangle.Fill>
,来节省ColorToBrushConverter。 - Clemens