为什么获胜';不要把这个代码放在绑定工作后面

本文关键字:代码 绑定 工作 获胜 为什么 | 更新日期: 2023-09-27 17:59:16

根据这篇博客文章,我实现了这两个类,并尝试了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); }
    }
}

}

为什么获胜';不要把这个代码放在绑定工作后面

编辑:

这有点奇怪。Source属性更改时,将更改OriginalImage。当OriginalImage更改时,使用绑定源也会更改。看起来有点像一个无限循环。但在这种情况下,会出现堆栈溢出异常。