我在自定义控件库中有一个CustomTabItem
。当我在xaml或代码中明确使用它时,它可以工作。当我使用绑定到ViewModel
(CaliburnMicro)而不是控件时,将使用标准TabItem
。如何在xaml中指定CustomTabItem
的使用?
我试图指定DataType = "{x:Type adc:ActorTabItem}"
-不起作用。
我尝试指定DataType="{x:Type adc:CustomTabItem}"
-无效。
<adc:TabControl ItemsSource="{Binding Pages}" Grid.Row="1">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"></TextBlock>
</DataTemplate>
</TabControl.ItemTemplate>
<adc:TabControl.ContentTemplate>
<DataTemplate>
<ContentControl cal:View.Model="{Binding}" />
</DataTemplate>
</adc:TabControl.ContentTemplate>
</adc:TabControl>
答案 0 :(得分:0)
您在这里发生了两件事:
您需要继承TabControl
的子类并覆盖其ItemContainerGenerator
属性,以生成您的MyTabItem
类型而不是其自身类型。不幸的是,没有子类就无法做到这一点。 ItemsPanelTempalate
与项目本身没有什么相似之处。
如果将TabControl.ItemsSource
绑定到集合,则在选项卡控件中对子项进行重新排序的方法是对绑定的集合进行重新排序,然后让TabControl
处理更新UI 。实际的集合必须是ObservableCollection
才能起作用,但是在任何情况下都应该如此。 TabControl.ItemsSource
的声明类型为System.Collections.IEnumerable
,但是您可以在放置处理程序中将其强制转换为System.Collections.IList
,并使用它来对集合进行重新排序。它将起作用,并且将发出适当的通知。
答案 1 :(得分:0)
您可以轻松完成自己想做的事情。只需按照以下方法覆盖GetContainerForItemOverride方法
public class TabControlEx : TabControl
{
protected override DependencyObject GetContainerForItemOverride()
{
return new TabItemEx();
}
}