C# Binding RelativeSource

<WrapPanel x:Name="WrapPanelName">
    <Border BorderThickness="1" BorderBrush="Blue">
        <TextBox x:Name="tbFindAncestor" Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type WrapPanel}}, Path=Name}" MinWidth="120"/>
    </Border>
</WrapPanel>

注:AncestorLevel指的是以Bingding目标控件为起点的层级偏移量,Border的偏移量是1,WrapPanel的偏移量是2, AncestorType指的是要找的目标对象的类型,AncestorLevel必须参考AncestorType使用,比如设置了AncestorType={x:Type WrapPanel},则Bingding在寻找时会忽略非WrapPanel的控件,此时WrapPanel的偏移量是1,Border不是WrapPanel类型所以被忽略.

例如:

    <WrapPanel Name="w2">
        <WrapPanel x:Name="w1">
            <Grid x:Name="g1">
                <Border BorderThickness="1" BorderBrush="Blue">
                    <TextBox x:Name="tbFindAncestor" Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type WrapPanel},AncestorLevel=2}, Path=Name}" MinWidth="120"/>
                </Border>
            </Grid>          
        </WrapPanel>
    </WrapPanel>

运行结果为:W2

 

posted @ 2024-08-14 10:46  竹楼风雨声  阅读(35)  评论(0)    收藏  举报