2016-07-03 2 views
0

사용자 지정 컨트롤 작업 중입니다.멀티 바인드 종속성 속성 문제가 발생했습니다.

다음과 같이 세 가지 종속성이 있습니다. 컨트롤 높이, 너비 및 사용자가 제공하는 범위에 따라 값을 계산해야하고 사용자 지정 컨트롤에 표시해야합니다.

이 세 값을 모두 바인딩 할 수있는 다중 바인딩을 사용하려고 시도하고 다중 값 변환기가 에 대한 계산을 수행하고 적절한 값을 반환합니다.

문제는이 값을 스타일에서 다중 값 변환기 바인딩으로 바인딩하지 못한다는 것입니다.

종속성 속성 :

public static readonly DependencyProperty ControlHeightProperty = 
     DependencyProperty.Register("ControlHeight", typeof(double), typeof 
    (TestControl), new PropertyMetadata(150D)); 

    public double ControlHeight 
    { 
     get { return (double)GetValue(ControlHeightProperty); } 
     set { SetValue(ControlHeightProperty, value); } 
    } 

    public static readonly DependencyProperty ControlWidthProperty = 
     DependencyProperty.Register("ControlWidth", typeof (double), typeof 
    (TestControl), new PropertyMetadata(default(double))); 

    public double ControlWidth 
    { 
     get { return (double) GetValue(ControlWidthProperty); } 
     set { SetValue(ControlWidthProperty, value); } 
    } 

    public static readonly DependencyProperty RangeProperty = 
     DependencyProperty.Register("Range", typeof (double), typeof 
    (TestControl), new PropertyMetadata(default(double))); 

    public double Range 
    { 
     get { return (double) GetValue(RangeProperty); } 
     set { SetValue(RangeProperty, value); } 
    } 

스타일 (내가 작성하지 않은 바인딩) : 나는 ElementName에 바인딩을 사용하여 을 할 수있는 것보다 속성이 같은 스타일을 사용할 수있는 경우. 하지만이 경우에는 높이와 너비가 다를 수 있습니다. 그러나 범위 내 스타일로 바인드 할 필요가 직접 종속성 속성이 입니다

누군가가 나를 도울 수

<TextBlock Grid.Row="1"> 
          <TextBlock.Text> 
           <MultiBinding Converter="{StaticResource 
    CalculateConverter}"> 
            <Binding Path=""></Binding> 
            <Binding Path=""></Binding> 
            <Binding Path=""></Binding> 
           </MultiBinding> 
          </TextBlock.Text> 
         </TextBlock> 
(내 말은 더는 내가 바인딩 ElementName을 수행 할 수있는 방법은 없습니다)?

감사 & 감사합니다,

답변

0

당신은 RelativeSource를 사용 할 수 있습니다.

<Binding Path="Range" RelativeSource="{RelativeSource AncestorType=UserControl, Mode=FindAncestor}"></Binding>