첨부 된 문자열 속성 이름은 첨부 파산물이 발사되지 않도록합니다

StackOverflow https://stackoverflow.com/questions/1005773

  •  05-07-2019
  •  | 
  •  

문제

첨부 된 속성에 대한 이상한 문제가 발생하여 첨부 된 속성의 이름에 대해 호출에 속성 이름을 할당하고 첨부 된 속성의 이름을 올바르게 이름을 지정할 때 첨부 된 속성 구현에 대한 코드가 dogn '입니다. T 화재. 단지 전화를받지 않습니다. 문자열 이름을 번역 ( "Translate_") 이외의 다른 것으로 변경하면 코드가 잘 호출됩니다.

구현은 다음과 같습니다.

공개 클래스 TranslateExtension : fectionencyObject {

public static readonly DependencyProperty TranslateProperty =
    DependencyProperty.RegisterAttached("Translate_",
                                        typeof(bool),
                                        typeof(TranslateExtension),
                                        new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));

public static void SetTranslate(UIElement element, bool value)
    {
        AssignKeys(element);
        element.SetValue(TranslateProperty, value);
    }
    public static bool GetTranslate(UIElement element)
    {
        return (bool)element.GetValue(TranslateProperty);
    }

    public bool Translate
    {
        set { base.SetValue( TranslateProperty,  value); }
    }
   ...
}

문자열의 속성이 번역 _이기 때문에 위의 내용은 실제로 작동합니다. 문자열 값을 "번역"하도록 변경하면 실패했습니다.

나는 같은 클래스에 2 개의 다른 첨부 된 속성을 가지고 있으며, 그것들은 정확히 동일한 동작을 나타냅니다. 다른 이름을 지정하고 작동합니다.

여기서 무슨 일이 일어나고 있는지 잘 모르겠습니다. 내 코드는 실제로 유효하지 않은 이름으로 작동하고 있지만 그 이유를 이해하지 못하고 더 중요한 것은이 잘못된 이름이 부작용을 유발하는지 확실하지 않습니다.

아무도 내가 고통스럽게 분명한 것을 간과하고 있는지 볼 수 있습니까? 나는 첨부 된 요법 기사에서 몇 가지 예를 다시 방문했으며 특수 이름을 사용하여 해당 구현을 볼 수 없습니다. 항상 문자열 속성을 첨부 된 속성과 동일하게 지정합니다.

도움이 되었습니까?

해결책

호출되지 않으므로 settranslate에 추가 코드를 넣지 않아야합니다. MSDN에서 여기:

사용자 정의 종속성 속성에 대한 시사점

속성 설정에 대한 XAML 프로세서 동작의 현재 WPF 구현은 래퍼를 완전히 우회하므로 사용자 정의 종속성 속성에 대한 래퍼의 세트 정의에 추가 로직을 넣지 않아야합니다. 해당 논리를 세트 정의에 넣으면 속성이 코드가 아닌 XAML로 설정되면 논리가 실행되지 않습니다.

마찬가지로 XAML 프로세서에서 속성 값을 얻는 XAML 프로세서의 다른 측면은 래퍼를 사용하지 않고 getValue를 사용합니다. 따라서 GetValue 호출을 넘어 GET 정의에서 추가 구현을 피해야합니다.

대신 FrameworkPropertyMetadata에 PropertyChangedCallback을 추가하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top