Для целей этого вопроса я определил очень простой пользовательский элемент управления:
<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>
Я хочу, чтобы пользователь (пользовательского элемента управления) мог установить свойство 'Text' для TextBox1 ', поэтому я определил свойство (названное' text '), которое получает и устанавливает 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 и поместил ссылку на пользовательский элемент управления ... Что я делаю неправильно?
(Стоит отметить, что при установке свойства text прямо так:
MyUserControl.text = "Another text";
все работает нормально, и поэтому я думаю, что эта проблема как-то связана с привязкой).