2

Control에서 상속하는 사용자 지정 컨트롤에 대한 종속성 속성 (Foreground)이 있습니다. 컨트롤을로드 할 때 사용자가 종속성 속성을 설정했는지 또는 값을 설정하기 전에 기본값을 사용하고 있는지 확인하려고합니다. 문제는 좀 더 복잡합니다. 여기에 있습니다 :Silverlight 2.0 : 종속성 속성을 변경하기 전에 설정되어 있는지 확인

컨트롤은 사용자가 프로젝트에 추가하는 사용자 지정 컨트롤 라이브러리에 있습니다. 프로젝트를 설정할 때 컨트롤의 기본값을 설정하는 동안 읽은 설정이 포함 된 x : 키를 사용하여 app.xaml 파일에 행을 추가 할 수 있습니다. 그러나 코드에서 또는 xaml에서 값을 설정하면이 전역 값으로 값을 설정하지 않으려 고합니다. 다음은 내가 말하는 것에 대한 시각화를 돕기위한 몇 가지 사례입니다.

  1. 사용자가 내 라이브러리에서 컨트롤을 만들어 해당 페이지에 저장합니다. 그런 다음 전경을 녹색으로 설정합니다. 전경의 가치를 그 컨트롤에 대해 녹색으로하고 싶습니다.

  2. 사용자는 app.xaml에 특정 종류의 모든 컨트롤에 빨간색의 전경색을 사용하려는 특수 행을 추가합니다. 나는 그 종류의 모든 컨트롤의 전경 값을 빨간색으로하고 싶다.

  3. 사용자는 app.xaml에 특정 종류의 모든 컨트롤에 빨간색의 전경색을 사용하려는 특수 행을 추가합니다. 그런 다음 단일 컨트롤 (xaml에서)의 전경 값을 노란색으로 설정합니다. 나는 그 종류의 모든 컨트롤의 전경 값을 빨간색으로 지정하고 그렇지 않으면 노란색으로 지정해야합니다.

컨트롤을로드 할 때 종속성 속성을 읽고 값을 설정했는지 또는 스타일에 정의 된 기본값인지 확인하고 싶습니다. 기본값 인 경우 app.xaml 파일에서 해당 특수 행을 읽고 그 색상으로 앞쪽을 설정하고 싶습니다.

답변

1

나는 조금 더 연구를 해본 결과 내가 답을 찾았다 고 생각합니다. 컨트롤을로드 할 때 (또는 업데이트 할 때)이 형식이 System.Object이면 ReadLocalValue (ForegroundProperty)의 형식을 확인합니다. 그러면 xaml에 설정되지 않습니다. 그러나이 유형이 System.Object (System.Windows.Media.Brush와 유사) 인 경우 xaml에이 유형이 설정됩니다.

5

MSDN page ReadLocalValue에서 완료하는 솔루션을 확장 :입니다

if (ReadLocalValue(FontSizeProperty) == DependencyProperty.UnsetValue) 
    // Do your thing... 

이 값을 설정하거나하지 않은 경우 확인에 대한 DependencyProperty.UnsetValue이 존재한다.

관련 문제