2012-05-02 3 views
1

Silverlight 응용 프로그램을 Metro로 이식하려고하는데 내 제어 템플릿 설정 내에서 {Binding PropertyName, RelativeSource={RelativeSource TemplatedParent}}에 대한 바인딩이 작동하지 않는 것으로 나타났습니다 ({TemplateBinding PropertyName}).RelativeSource TemplatedParent에 바인딩이 ControlTemplate 내에서 작동하지 않습니다.

내 Silverlight 응용 프로그램 내에서이 두 가지 모두 작동하지만 Mode=TwoWay의 사용을 허용하려면 RelativeSource 구문을 사용해야합니다.

ControlTemplate에서 TwoWay 바인딩을 사용하려면 어떻게해야합니까?

답변

2

컨트롤을 직접 작성하는 경우 OnApplyTemplate() 재정의에서 GetTemplateChild()를 호출하여 템플릿 파트를 정의하고 검색 할 수 있습니다. 그런 다음 바인딩을 사용하는 대신 수동으로 속성을 업데이트하십시오. 기존 컨트롤을 다시 템플릿으로 작성하는 경우 먼저 하위 클래스로 만들거나 바인딩 종속 관계 속성 인/behaviors을 만들어 바인딩을 처리 할 수 ​​있습니다.

+0

SL5, WP7 및 Metro 사이에서 제어 논리의 코드베이스를 공유하려고 시도 중이므로 ControlTemplate 내에 관련된 UI를 유지하려고 시도하고있었습니다. 즉, 당신이 제안하고 내 OnApplyTemplate에서 바인딩을 설정하려고 시도했지만 ListBox.SelectedItemProperty에 대한 TwoWay 바인딩이 작동하지 않는 것으로 나타나고 PropertyChangedCallback을 실행하지 않습니다. 어쩌면 이것은 ListBox 컨트롤의 문제 일 것입니다. –

+0

사용자 지정 ContentControl이 포함 된 새 응용 프로그램에서이 내용을 복제하려고 시도했지만 제대로 작동하지 않았습니다. 드로잉 보드로 돌아 가기! –

+0

ListBox에 SelectionChanged 이벤트 처리기를 추가하면 수동으로 업데이트됩니다. 나는 단지 이것을 다음주에 끝내는 Win8 dev 캠프에 가져 가야하고 그들이 말하는 것을보아야 할 것이다! –

관련 문제