尝试动态构建TabControl,但不会绑定我创建的UserControl。我已经扩展了TabItem,以向标题添加一些关闭功能。
它给出的错误是:
System.Windows.Data Error: 26 : ItemTemplate and ItemTemplateSelector are ignored for items already of the ItemsControl's container type; Type='ClosableTab'
我最终得到了纯文本而不是控件的System.Windows.Controls.Grid。 UserControl只是在一个空网格中包含一个TextBlock,用于测试。
该错误与以下问题非常相似:Data Error 26 with DataTemplate and ItemTemplate,但是我的代码不同,因此我无法弄清楚是否相同,但是我尝试进行搜索。
此代码包含来自多个教程的内容,但我仍然只有一个月的时间,如果我错过了明显的内容,对不起。
<TabControl TabStripPlacement="Top"
ItemsSource="{Binding Titles, Mode=TwoWay}"
Grid.Column="3" Grid.Row="1">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Header}" />
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<TextBlock Text="{Binding Content}" />
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
扩展的TabItem类。 TabHeader只是Xaml,用于向标题添加关闭按钮,效果很好。 {Binding Content}确实显示警告,
Cannot resolve property 'Content' in data context of type MyApp.ViewModel.MainWindowViewModel
也许这是关键吗?
public class ClosableTab : TabItem
{
public ClosableTab(string headerText, UserControl content)
{
TabHeader header = new TabHeader();
Header = header;
Title = headerText;
Content = content;
}
public string Title
{
get { return Title.ToString(); }
set
{
((TabHeader)this.Header).label_TabTitle.Content = value;
}
}
}
ICommand事件处理程序
private ObservableCollection<ClosableTab> _titles;
public ObservableCollection<ClosableTab> Titles
{
get { return _titles; }
set
{
_titles = value;
OnPropertyChanged("Titles");
}
}
private void AddTabItem(string title)
{
ClosableTab Item;
Item = new ClosableTab("Setup", new Setup());
Titles.Add(Item);
Item.Focus();
OnPropertyChanged("Titles");
}
New Setup()是一个仅包含网格和文本块的用户控件。
一切正常,标题是用标题和关闭按钮构建的,但是内容仅返回文本System.Windows.Controls.Grid?
答案 0 :(得分:0)
<TabControl.ContentTemplate>
<DataTemplate>
<TextBlock Text="{Binding Content}" />
</DataTemplate>
</TabControl.ContentTemplate>
TextBlock ...我不是个聪明人。