从this blog post开始,我实现了这两个类并尝试了XAML,它可以工作。我想做一个相同的自定义控件,所以我写了这个。但是,它不会重新着色图像。它只产生无色图像。我认为我对绑定做错了,但我不确定。
编辑:将代码更改为SSCCE
public class ColorableImage : Image
{
// Used by the converter to color the source
public static readonly DependencyProperty ColorProperty;
static ColorableImage()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(ColorableImage), new FrameworkPropertyMetadata(typeof(ColorableImage)));
ColorProperty = DependencyProperty.Register("Color", typeof(Color), typeof(ColorableImage), new FrameworkPropertyMetadata(new PropertyChangedCallback(ColorPropertyChanged)));
}
private static void ColorPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
ColorableImage castedSender = (ColorableImage)sender;
Image img = new Image();
img.Source = castedSender.Source;
Color color = castedSender.Color;
Binding binding = new Binding("Source")
{
Source = img,
Converter = new HighlightImageConverter(),
ConverterParameter = color
};
castedSender.SetBinding(ColorableImage.SourceProperty, binding);
}
public Color Color
{
get { return (Color)GetValue(ColorProperty); }
set { SetValue(ColorProperty, value); }
}
}
}
答案 0 :(得分:0)
编辑:
嗯,这有点奇怪。当Source属性更改时,您更改OriginalImage。并且使用绑定Source会在OriginalImage更改时更改。看起来有点像无限循环。但在这种情况下会出现堆栈溢出异常。