How can I use Grid.Row Property as a DataBinding P

2019-08-07 19:00发布

问题:

I'd like to set a MultiDataTrigger for a TextBox as shown in the code below.

If IsNormal property, which I defined in the code-behind, is false and the TextBox is in the 2nd row of a Grid, IsEnabled of it should be false.

However, the Condition regarding the Grid.Row does not work properly.

Could you tell me how it is possible to use a Grid.Row property as a binding path in this case?

<Style TargetType="TextBox">
    <Style.Triggers>
        <MultiDataTrigger>
            <MultiDataTrigger.Conditions>
                <Condition Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}, Path=IsNormal}" 
                           Value="False"/>
                <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=Grid.Row}"
                           Value="2"/>
            </MultiDataTrigger.Conditions>
            <Setter Property="IsEnabled" Value="False"/>
        </MultiDataTrigger>
    </Style.Triggers>
</Style>

回答1:

Grid.Row is an attached property, so it should be like this:

<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=(Grid.Row)}"
                       Value="2"/>

Use (OwnerClass.AttachedProperty) to indicate path to AttachedProperty of the OwnerClass.