2010-08-18 37 views
1

我正在处理用户控件,现在我有一个路径作为控件的一部分。根据某些数据的值,我想要显示3种可能的路径。为了确定我想要使用哪个路径,我有一个值转换器,它接收数据并返回一个数字来表示我应该使用哪条路径。当数据发生变化时价值转换器没有被调用

我的第一个想法是仅仅使用我从中获取数据的两个依赖属性中的属性更改回调,但这些回调必须是静态的,并且XAML代码始终是非静态的。

我的第二次尝试是现在使用数据触发器与上述的值转换器。以下是我的代码。

   <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条不同的路径,并使用setter方法来改变每个的知名度,但我认为有一个路径,并改变其propertise会更合乎逻辑。我也更喜欢一条路,因为我的目标是最终在路径之间生成动画,而不是立即改变它们。

谢谢!

回答

2

您可以通过在属性更改回调中投入sender参数来获取实例。

+0

谢谢!我觉得很愚蠢,因为我应该知道这一点。我认为它避开了我,因为在回调中你有“DependencyObject d”而不是“对象发送者”,但是转换工作同样很好。 – brandon 2010-08-18 17:57:49

相关问题