将数据绑定到动态创建的wpf TabItem中的控件时出现问题

时间:2010-11-15 14:18:16

标签: wpf tabitem datatemplate

我在将数据放入wpf TabItem的控件时遇到问题。 我在xaml中定义了几个DataTemplates。这是其中之一:

<Window.Resources>
...
<DataTemplate x:Key="memoTab">
<TextBox Name="memoTextBox" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" AcceptsReturn="True" />
</DataTemplate>
...
</Window.Resources>

然后我在代码后面创建新选项卡,如下所示:

TabItem tab = new TabItem();
tab.Header = "Memo";
tab.ContentTemplate = (DataTemplate)FindResource("memoTab");
tab.ApplyTemplate();
System.Windows.Controls.TextBox tb = (System.Windows.Controls.TextBox)tab.Template.FindName("memoTextBox", tab);
if (tb != null) tb.DataContext = memo; //string memo is created earlier as linq query
tabControl.Items.Add(tab); //tabControl is xaml defined

问题是tb总是为空,因此文本框中没有数据出现(文本框本身显示在选项卡中并且它是有效的)

我不使用xaml在tabControl中创建选项卡(除了第一个没有使用DataTemplate并且很好),因为它们是在运行时由用户添加和删除的。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您可能需要获取ContentPresenter的{​​{1}}。您可以为此引用MSDN

TabItem

方法FindVisualChild ...

// Getting the ContentPresenter of tab
ContentPresenter myContentPresenter = FindVisualChild<ContentPresenter>(tab);

// Finding textBox from the DataTemplate that is set on that ContentPresenter
DataTemplate myDataTemplate = myContentPresenter.ContentTemplate;
TextBox myTextBox = (TextBox)myDataTemplate.FindName("memoTextbox", myContentPresenter);