2017-05-03 1 views
-2

지금 사용자 지정 컨트롤을 구현하려고합니다. (당연히 내가 첨부 한 데모 솔루션보다 더 복잡합니다.) 값을 전달할 때 실패했습니다. 다운 바인딩. 모든하위 클래스가있는 사용자 지정 컨트롤에 대한 WPF 컴플렉스 바인딩을 설정으로 사용합니다.

먼저, 제어의 구조 :

  • 제어
  • 설정 (이것은 제어 종속성 속성이며 (이것은 기본적으로 공통의 기능을 등록을 통과하여 처리하는 래퍼) 텍스트 (이것은 설정 클래스의 종속성 속성입니다.)
  • _renderer (컨트롤을 렌더링하는 컨트롤의 개인 필드입니다.> 내 실제 컨트롤에서는 그 중 일부이지만,이 예제에서는 그냥 해보기 만하면됩니다. 그런 식으로).

목표는 텍스트 상자와 같은 컨트롤의 텍스트를 설정에 대한 참조로 초기화되는 렌더러로 전달하는 것입니다.

제어는 다음과 같이 기록 사용하는 XAML : 즉시

<TextBox Text="Initial Text" 
     x:Name="TextSource" 
     Grid.Row="0" /> 
<local:CustomControl Grid.Row="1"> 
    <local:CustomControl.Settings> 
     <local:CustomControlSettings Text="{Binding Path=Text, ElementName=TextSource, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" /> 
    </local:CustomControl.Settings> 
</local:CustomControl> 

나도 같은 XAML을 사용하지만 "텍스트"에 대한 설정을 고정 된 값을 제공

다음 모든 것이 예상 작품으로하지만, 나는 그것을 구속력으로 바꿀 때 더 이상 초기 값을 얻지 못한다. 텍스트 아래로 통과와

코드 :

  1. 렌더러 렌더러로 설정 텍스트를 결합

    private void OnLoaded(object sender, RoutedEventArgs e) 
    { 
        _renderer = new ControlRenderer(); 
        _renderer.Initialize(_renderArea, Settings); 
    } 
    
  2. 내부 텍스트 종속성 속성에 설정을 전달을

    SetBinding(TextProperty, new Binding{Path = new PropertyPath(CustomControlSettings.TextProperty), Source = settings}); 
    

참고 : 영향을주지 않고 주석 처리를 제거 할 수 있으므로 나에게 묻는다면 문제가되지 않습니다.

And here´s a link to the demo solution I created.

+0

귀하의 문제가 궁금합니다. 바인딩을 변경하고 이전 값이 손실된다는 것을 귀찮게합니다. – bradbury9

+0

문제는 텍스트 상자의 값이 절대로 전달되지 않는다는 것입니다.) –

+0

누군가 -1을 설명하기 위해 신경 써야합니까? –

답변

0

고통의 4 시간 후에, 나중에 나는 해결책을 발견했다. 문제는 설정 개체가 시각적 트리의 일부가 아니므로 종속성 속성이 해결되지 않는다는 것입니다.

이렇게하려면 위와 같은 작업을 수행하려면 설정을 시각적 트리에 추가해야합니다. 나는 그것을 CustomControl 내부의 캔버스 하위에 추가하여이를 수행했습니다.

관련 문제