如何使用XAML访问外部的控制模板控件?

时间:2017-02-21 09:37:15

标签: wpf xaml

我想在另一个NumericUpDown DatatTrigger中使用ControlTemplate内设计的NumercUpDown值,根据条件设置其最大值。

代码-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>

想要使用以下数据触发器中的上述Price元素

<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>

1 个答案:

答案 0 :(得分:0)

使用Ancestor绑定访问

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