我在将数据放入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并且很好),因为它们是在运行时由用户添加和删除的。
有什么想法吗?
答案 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);