为什么以下Binding表达式不一样?

时间:2014-10-21 13:11:41

标签: c# wpf xaml binding

我正在尝试在自定义用户控件中设置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>

我尝试明确地将Text属性TextBox分开,最初添加MultiBinding。如果这不起作用,我注意到只有一个Binding它没有用。我的意思是:

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

我认为这应该与前一种情况完全相同,但实际上并没有效果。虽然它编译得很好,但Binding永远找不到任何价值。为什么两者不同,如何将后者固定为一个有效的表达式?

1 个答案:

答案 0 :(得分:3)

在绑定中使用RelativeSource代替Source

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