2014-04-21 34 views
0

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

編輯:

那麼這是一個有點奇怪。當Source屬性更改時,您更改了OriginalImage。當使用OriginImage更改時使用綁定Source更改。看起來有點像一個無限循環。但在這種情況下會出現堆棧溢出異常。

+0

是的 - 該屬性過去被稱爲ColorOverlay,我忘記與它一起更改該字符串。謝謝你提醒我。我將考慮爲Color創建另一個處理程序,而不是一個setter –

+0

如果您不想花時間寫DP代碼,您可以使用一些代碼片段。我使用WPF博士http://drwpf.com/blog/2007/11/17/my-wpf-code-snippets/ – Dmitry

+0

看我的文章編輯 –