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

2019-08-07 18:30发布

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条回答
不美不萌又怎样
2楼-- · 2019-08-07 19:05

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.

查看更多
登录 后发表回答