2010-08-18 2 views
1

현재 사용자 정의 컨트롤에서 컨트롤의 일부로 경로를 사용하고 있습니다. 특정 데이터 값을 기반으로 표시 할 수있는 세 가지 경로가 있습니다. 사용할 경로를 결정하기 위해 데이터를 가져 와서 사용해야하는 경로를 나타내는 값을 반환하는 값 변환기가 있습니다.데이터가 변경 될 때 값 변환기가 호출되지 않음

내 첫 번째 생각은 데이터를 가져 오는 두 종속성 속성에서 콜백 속성을 사용하는 것이었지만 이러한 콜백은 정적이어야하며 XAML 코드는 항상 비 정적입니다.

두 번째 시도는 위에서 설명한 값 변환기와 함께 datatriggers를 사용하는 것입니다. 아래 코드는 내가 가지고있는 코드이다.

   <Path x:Name="path" Stretch="Fill" Width="111.75" Height="118.718" Data="F1M205.917,103.0088C189.333,93.8108,170.128,88.9998,150,88.9998C129.873,88.9998,110.584,93.8108,94.167,102.8408L116.1,144.2508L150,208.7178L183.9,144.2508z" Canvas.Left="0" Canvas.Top="0"> 
       <Path.Resources> 
        <Style TargetType="{x:Type Path}"> 
         <Style.Triggers> 
          <DataTrigger Value="-1"> 
           <DataTrigger.Binding> 
            <MultiBinding Converter="{StaticResource ToleranceRangeTypeChecker}"> 
             <Binding ElementName="UserControl" Path="ToleranceZoneLowerBound" /> 
             <Binding ElementName="UserControl" Path="ToleranceZoneUpperBound" /> 
            </MultiBinding> 
           </DataTrigger.Binding> 
           <Setter Property="Data" Value="F1M205.917,103.0088C189.333,93.8108,170.128,88.9998,150,88.9998C129.873,88.9998,110.584,93.8108,94.167,102.8408L116.1,144.2508L150,208.7178L183.9,144.2508z" /> 
           <Setter Property="Width" Value="111.75" /> 
           <Setter Property="Height" Value="118.718" /> 
           <!--<Setter Property="Canvas.SetLeft"--> 
          </DataTrigger> 
          <DataTrigger Value="0"> 
           <DataTrigger.Binding> 
            <MultiBinding Converter="{StaticResource ToleranceRangeTypeChecker}"> 
             <Binding ElementName="UserControl" Path="ToleranceZoneLowerBound" /> 
             <Binding ElementName="UserControl" Path="ToleranceZoneUpperBound" /> 
            </MultiBinding> 
           </DataTrigger.Binding> 
           <Setter Property="Data" Value="F1M150,88.9998C129.873,88.9998,110.584,93.8108,94.167,102.8408L150,208.7178C150,208.7178,150,114.157407529625,150,88.9998z" /> 
           <Setter Property="Width" Value="55.917" /> 
           <Setter Property="Height" Value="118.718" /> 
           <!--<Setter Property="Canvas.SetLeft"--> 
          </DataTrigger> 
          <DataTrigger Value="1"> 
           <DataTrigger.Binding> 
            <MultiBinding Converter="{StaticResource ToleranceRangeTypeChecker}"> 
             <Binding ElementName="UserControl" Path="ToleranceZoneLowerBound" /> 
             <Binding ElementName="UserControl" Path="ToleranceZoneUpperBound" /> 
            </MultiBinding> 
           </DataTrigger.Binding> 
           <Setter Property="Data" Value="F1M205.917,103.0088C189.333,93.8108 170.128,88.9998 150,88.9998 150,113.365662567029 150,208.7178 150,208.7178L183.9,144.2508z" /> 
           <Setter Property="Width" Value="111.75" /> 
           <Setter Property="Height" Value="118.718" /> 
           <!--<Setter Property="Canvas.SetLeft"--> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 

내가 가진 또 다른 생각이 아니라 실제로 3 개 가지 경로가 각각의 가시성을 변경하는 세터를 사용했다,하지만 난 하나 개의 경로를 가지고 변화하는 그것의 propertise 더 논리적이 될 것이라고 생각합니다. 내 목표는 마침내 변경하지 않고 경로 사이에서 최종적으로 움직이기 때문에 하나의 경로를 선호합니다.

감사합니다.

답변

2

속성 변경 콜백에 sender 매개 변수를 캐스팅하여 인스턴스를 가져올 수 있습니다.

+0

감사합니다. 내가 이것을 알아야했기 때문에 나는 바보가된다. 콜백에서는 "객체 발신자"대신 "DependencyObject d"가 있기 때문에 캐스팅이 잘 된 것처럼 느껴진다. – brandon

관련 문제