例如,有一个TextBlock
<UserControl x:Class="MyControl">
<TextBlock x:Name="myTextBlock" Text="text"/>
</UserControl>
然后,我想将TextBlock的Text
属性绑定到一个Window TextBox
<Window x:Class="MyWindow">
<local:MyControl x:Name="myControl"/>
<TextBox Text="{Binding ...}"/>
</Window>
我该怎么做?
我尝试了{Binding myControl.Text, ElementName=myControl}
,但没有成功。
答案 0 :(得分:1)
您的UserControl需要公开属性,以便您可以使用ElementBinding将其绑定到Window中。 最好的方法可能是在UserControl的代码后面的文件中创建一个类型为string的依赖属性“Text”并绑定到它:
public partial class MyControl : UserControl
{
public static readonly DependencyProperty TextProperty =
DependencyProperty.Register("Text", typeof(string), typeof(MyControl));
public string Text
{
get { return (string)GetValue(TextProperty); }
set { SetValue(TextProperty, value); }
}
public MyControl()
{
InitializeComponent();
}
}
XAML:
<UserControl x:Class="Test.MyControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Name="Root">
<TextBlock Text="{Binding Text, ElementName=Root}" />
</UserControl>
然后在你的Window中绑定它:
<StackPanel>
<test:MyControl Text="Hello" x:Name="myControl" />
<TextBox Text="{Binding Text, ElementName=myControl, UpdateSourceTrigger=PropertyChanged}" />
</StackPanel>
另一种方式: 如果您不希望在控件中创建依赖项属性的开销,可以使用未使用的现有属性,如Tag属性:
<StackPanel>
<UserControl Tag="Hello" x:Name="MyControl">
<TextBlock x:Name="TB" Text="{Binding Tag, ElementName=MyControl}" />
</UserControl>
<TextBox Text="{Binding ElementName=MyControl, Path=Tag, UpdateSourceTrigger=PropertyChanged}" />
</StackPanel>