2014-04-21 2 views
0

this blog post에서 2 개의 클래스를 구현하고 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가 변경됩니다. 바인딩을 사용하면 OriginalImage가 변경 될 때 Source가 변경됩니다. 무한 루프처럼 보입니다. 그러나이 경우에는 스택 오버플로 예외가 발생합니다.

+0

예 - ColorOverlay라는 속성이 사용되었으며 해당 문자열을 함께 변경하는 것을 잊었습니다. 나를 상기시켜 줘서 고마워. setter 대신 Color에 대한 다른 핸들러를 만드는 방법을 살펴 보겠습니다. –

+0

DP 코드를 작성하는 데 시간을 낭비하고 싶지 않으면 몇 가지 발췌 문장을 만들 수 있습니다. WPF 박사의 자료를 사용합니다. http://drwpf.com/blog/2007/11/17/my-wpf-code-snippets/ – Dmitry

+0

내 게시물보기 –

관련 문제