为什么以下绑定表达式不相同

本文关键字:表达式 绑定 为什么 | 更新日期: 2023-09-27 18:27:15

我正试图在自定义用户控件内设置TextBox的文本。以下操作很好:

<Style TargetType="{x:Type MyCustomControl}"  >
    <Setter Property="Template" >
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type MyCustomControl}">
                <Canvas>
                    <TextBox Text="{Binding CustomControlText, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type MyCustomControl}}}">
                </Canvas>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

我试图显式地分离出TextBoxText属性,最初是添加一个MultiBinding。当这不起作用时,我注意到对于单个Binding也不起作用。我的意思是:

<Canvas>
     <TextBox>
         <TextBox.Text>
             <Binding Path="CustomControlText" Source="{RelativeSource FindAncestor, AncestorType={x:Type MyCustomControl}}"/>
         </TextBox.Text>
     </TextBox>
</Canvas>

我认为这应该与前一种情况完全相同,但实际上并不奏效。尽管它编译得很好,但这个Binding从未找到任何值。为什么两者不同,后者如何固定为一种功能表达?

为什么以下绑定表达式不相同

在绑定中使用RelativeSource而不是Source

<Binding Path="CustomControlText" RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type MyCustomControl}}"/>