是否可以在WPF内更改ImageBrush颜色?

是否可以在WPF内更改ImageBrush颜色?,wpf,silverlight,Wpf,Silverlight,我试图做一些非常简单的事情,但我不确定这是否可能。我有这样的图像: 在我的棋盘游戏项目中,我用它来指示鼠标在棋盘上的位置,以及类似的东西(棋盘是一个8x8网格,里面有一个矩形)。我还将网格单元格背景笔刷设置为蓝色和.25不透明度的SolidColorBrush,而位于其上方的矩形与目标相同,或者反之亦然,因为我无法达到我想要的效果,即黑色部分变为全蓝色,作为我的笔刷,其余部分仍保留不透明度等。就像我做的那样,可以使黑色部分变蓝,背景为半透明,但边框的颜色还不太正确: 我不知道我是否能把自己说

我试图做一些非常简单的事情,但我不确定这是否可能。我有这样的图像:

在我的棋盘游戏项目中,我用它来指示鼠标在棋盘上的位置,以及类似的东西(棋盘是一个8x8网格,里面有一个矩形)。我还将网格单元格背景笔刷设置为蓝色和.25不透明度的SolidColorBrush,而位于其上方的矩形与目标相同,或者反之亦然,因为我无法达到我想要的效果,即黑色部分变为全蓝色,作为我的笔刷,其余部分仍保留不透明度等。就像我做的那样,可以使黑色部分变蓝,背景为半透明,但边框的颜色还不太正确:

我不知道我是否能把自己说清楚,但我想这张照片显示了我的目标是什么

守则:

            ImageBrush targetBrush = new ImageBrush();
            targetBrush.ImageSource = new BitmapImage(new Uri("Resources/GameScreen/selectedTile.png", UriKind.Relative));
            targetBrush.Opacity = 1;

            SolidColorBrush backBrush = new SolidColorBrush(Colors.Blue);
            backBrush.Opacity = .25;

            tile.Children.Add(new Rectangle());
            foreach (object target in tile.Children)
            {
                if (target.GetType() == typeof(Rectangle))
                {

                    ((Rectangle)target).Fill = backBrush;
                }
            }



            tile.Background = targetBrush;

提前感谢。

由于图像只是一个遮罩,您可以使用带有蓝色填充的
矩形,并在图像上设置一个集。

我回答了一个关于WPF的类似问题,但不确定它是否适用于Silverlight。我的想法是使用WPF,但由于它与SL非常相似,我也添加了该标记。谢谢@MarkHall我有点希望WPF框架中有一个解决方案。。。使用该库将比创建5个不同的50x50单色png文件花费更多/我在答案的末尾引用了一些WPF类。你看了吗?你能告诉我怎么做吗?我只能找到XAML示例,但我必须从“代码隐藏”中设置OpacityMask,而从ImageBrush中创建OpacityMask没有任何作用。@Lorgarn:在“代码隐藏”中应该完全相同(除非使用名称,这需要手动与名称范围交互)。可能笔刷的缩放不正确?您是否能够使用XAML生成工作结果?(我也怀疑您是否真的必须在代码隐藏中这样做。)很抱歉,但我必须这样做,因为我的图像来自数据库,在运行时我不知道它。我想我的问题与此有关。我首先提出了一个问题:@Lorgarn:在代码中,您需要做的唯一一件事就是获取图像数据(并可能将其转换为
ImageSource
),其他一切都可以在XAML中创建和绑定。