我想將文本框綁定到在代碼隱藏文件中定義的窗口屬性。通過窗口名稱綁定到代碼後面的屬性
當使用「FindAncestor」設置RelativeSource來查找窗口時,引用窗口時綁定成功。
爲什麼通過名稱來引用窗口不起作用,就像我可以綁定窗口的「Title」屬性一樣?
XAML:
<Window x:Class="WpfApplication123.MainWindow"
x:Name="MyWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="WPF Binding Example" Height="180" Width="237">
<Grid>
<TextBox Height="23" HorizontalAlignment="Left" Margin="24,24,0,0" Name="textBox1" VerticalAlignment="Top" Width="136"
Text="{Binding ElementName=MyWindow, Path=Title}"/>
<TextBox Height="23" HorizontalAlignment="Left" Margin="24,53,0,0" Name="textBox2" VerticalAlignment="Top" Width="136"
Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=XYZ}"/>
<TextBox Height="23" HorizontalAlignment="Left" Margin="24,82,0,0" Name="textBox3" VerticalAlignment="Top" Width="136"
Text="{Binding ElementName=MyWindow, Path=XYZ}" />
</Grid>
</Window>
後面的代碼:
namespace WpfApplication123
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
XYZ = "XYZ!";
}
public string XYZ { get; set; }
}
}
關鍵的一點是WPF在IntializeComponent()期間取得了屬性的值。當時,該物業尚未確定。感謝您的澄清!在窗口類中設置DataContext只是在XAML中使用ElementName的替代方法。 –