在WPF中公开绑定的子控件依赖属性

时间:2013-12-01 11:39:44

标签: .net wpf xaml custom-controls dependency-properties

我有一个非常简单UserControl名为CustomTextBox的XAML:

<UserControl x:Class="CustomTextBox" ... >
    <Grid>
        <TextBox x:Name="InnerTextBox"/>
    </Grid>
</UserControl>

现在当我使用CustomTextBox并希望绑定到InnerTextBox.Text时,它不起作用:

... {Binding ElementName=CustomTextBox, Path=InnerTextBox.Text}

我尝试了另一种方式,但效果不好:

... {Binding ElementName=CustomTextBox.InnerTextBox, Path=Text}

我知道我可以定义名为CustomTextBox.Text一个新的依赖项属性,然后将其绑定到InnerTextBox.Text但我计划拥有许多属性的自定义控件,这是地狱复制所有这些的作品只是为了支持绑定。此外,复制/包装属性意味着每个值都存储两次。

在WinForms中,这是一个简单的继承问题,所有属性都可以自动使用。在WPF中,无法继承XAML控件,并且无法访问属性。

有没有简单的方法来设置从某个控件到UserControl的子元素属性的绑定?

3 个答案:

答案 0 :(得分:3)

1.在您的控件后面的代码中创建一个新的DP,比如说我们称之为文本
2.在您的代码的xaml中:

<TextBox x:Name="InnerTextBox" Text={Binding Text}/> 


3.确保textBox的DataContext是UserControl

答案 1 :(得分:0)

查看visual studio的Output窗口中的Debug文本,它将给出数据绑定错误的解释性文本。

答案 2 :(得分:0)

你可以做一个继承。您没有正确创建自定义控件。在Wpf Coustom Control中有两部分

  1. C#part-&gt;控件的行为。在C#部分,您可以执行继承
  2. Xaml Part-&gt; UI或控件的外观
  3. 请参阅以下链接了解更多详情

    http://msdn.microsoft.com/en-us/library/cc295235.aspx

    http://www.codeproject.com/Articles/17830/Creating-and-consuming-a-custom-WPF-control

    http://www.codeproject.com/Articles/49802/Create-a-WPF-Custom-Control-Part-2

    http://wpftutorial.net/HowToCreateACustomControl.html