对于这个问题的目的范围内绑定控件的属性,我已经定义了一个非常简单的用户控制:用户控制
<UserControl x:Class="simpleUserControl.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="300"
Width="300">
<Grid>
<TextBox Name="TextBox1"/>
</Grid>
</UserControl>
我想(用户控件),用户能够设置“TextBox1中”的“文本”属性,所以我定义的属性(将其命名为“文”),其获取和设置TextBox1.Text:
namespace simpleUserControl
{
public partial class UserControl1 : UserControl
{
public string text
{
get { return TextBox1.Text; }
set { TextBox1.Text = value; }
}
public static readonly DependencyProperty textProperty = DependencyProperty.Register("text", typeof(string), typeof(UserControl1));
public UserControl1()
{
InitializeComponent();
}
}
}
现在,使用用户控制的时候,我想绑定这个'text'属性给一些字符串对象:
<Window x:Class="WpfApplication33.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:simple_user_control="clr-namespace:simpleUserControl;assembly=simpleUserControl"
Title="Window1"
Height="300"
Width="300"
Loaded="Window_Loaded">
<Grid Name="MainGrid">
<simple_user_control:UserControl1 Name="MyUserControl">
<simple_user_control:UserControl1.text>
<Binding Path="my_text"/>
</simple_user_control:UserControl1.text>
</simple_user_control:UserControl1>
</Grid>
</Window>
和后面的代码:
namespace WpfApplication33
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
string my_text = "this is a text";
private void Window_Loaded(object sender, RoutedEventArgs e)
{
MainGrid.DataContext = this;
}
}
}
但是,这并不出于某种原因...我不明白为什么,因为我已经设置了DataContext的,把一个参考用户控件。 ..我错了什么? (值得一提的是,直接设置“文本”属性的时候是这样的:
MyUserControl.text = "Another text";
一切工作正常,因此,我认为,这个问题有什么用结合做的)。
这是因为DependencyObject textProperty不会自动继承其父控件的绑定上下文。因此你的代码:不会返回任何东西。我有同样的问题,仍然在寻找解决方案。 –
2013-01-08 21:03:16