2017-02-21 80 views
1

我想在另一个NumericUpDown DatatTrigger的ControlTemplate中使用设计的NumercUpDown值,根据条件设置其最大值。如何使用XAML访问外部的控制模板控件?

代码为-1

<ControlTemplate x:Key="OrderInfo" TargetType="ContentControl"> 

      <TextBlock Grid.Row="0" Grid.Column="0" Style="{StaticResource TextBlockStyle}">Limit Price:</TextBlock> 
      <i:NumericUpDown Grid.Row="0" Grid.Column="1" x:Name="Price" i:Skin.IsPrice="True" RoundingDecimalPlaces="{Binding Source={StaticResource PriceFormat}, Path=MaxDecimalPlaces}" DisplayFormat="{Binding Source={StaticResource PriceFormat}, Path=StringFormat}" Minimum="0" Increment="{Binding Path=PriceIncrement.Value, TargetNullValue=1}" IncrementCount="{Binding Path=PriceIncrementCount.Value}"> 
       <i:NumericUpDown.Style> 
        <Style TargetType="i:NumericUpDown" BasedOn="{StaticResource BasicStyle}"> 
         <Setter Property="Value" Value="{Binding Path=Price.Value, ValidatesOnExceptions=True, ValidatesOnDataErrors=True}" /> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding Path=Price.IsAvailable}" Value="False"> 
           <Setter Property="Value" Value="{Binding Path=Price.EstimatedPrice, Mode=OneWay}" /> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </i:NumericUpDown.Style> 
      </i:NumericUpDown> 

     </Grid> 
    </ControlTemplate> 

想使用上述价格元素在下面的数据触发

<i:NumericUpDown Grid.Row="0" Grid.Column="3" x:Name="CompletionPrice" 
           Value="{Binding Path=ExternalAlgoProperties[(i:Description)CompletionPrice].Value, 
        ValidatesOnExceptions=True, ValidatesOnDataErrors=True}" IsEnabled="True" 
           RoundingDecimalPlaces="0" Increment="1" Minimum="0"> 
        <i:NumericUpDown.Style> 
         <Style TargetType="i:NumericUpDown" BasedOn="{StaticResource BasicStyle}"> 
          <Setter Property="Maximum" Value="0"></Setter> 
          <Style.Triggers> 
           <DataTrigger Binding="{Binding Path=Side.Code,ConverterParameter={x:Static i:SideCodes.Sell}, Converter={StaticResource EqualsConverter},UpdateSourceTrigger=PropertyChanged}" Value="True"> 
            <Setter Property="Maximum" Value="{Binding ElementName=Price,Path=Text,UpdateSourceTrigger=PropertyChanged}"></Setter> 
           </DataTrigger> 
          </Style.Triggers> 
         </Style> 
        </i:NumericUpDown.Style> 

       </i:NumericUpDown> 
+0

你能不能引用viewmodel'Price'属性而不是试图交叉引用XAML模板的内容? – grek40

+0

可能是一个很好的解决方案。谢谢 – KrishOnline

回答

0

使用祖先绑定访问

  <DataTrigger 
        Binding="{Binding 
         RelativeSource={RelativeSource 
          Mode=FindAncestor, 
          AncestorType={x:Type i:NumericUpDown }}, 
          Path=value}" 
        Value="True"> 
       //Set property 
      </DataTrigger> 
+0

@ragvan我应该在哪里提供元素名称? 我必须在setter属性“最大”值中绑定它 – KrishOnline

+0

@KrishOnline你不需要提供元素名称,你可以像上面那样使用。如果你想设置你的元素,只需提及Target =“ElementName” – Ragavan