【问题标题】:TabControl with an new tab button带有新选项卡按钮的 TabControl
【发布时间】:2012-01-31 20:22:49
【问题描述】:

我有以下 TabControl:

<TabControl x:Name="Networks">
  <TabControl.ItemTemplate>
    <DataTemplate>
      <StackPanel Orientation="Horizontal">
        <TextBlock Text="{Binding DisplayName}" />
        <Button Content="X" cal:Message.Attach="CloseItem($dataContext)" />
      </StackPanel>
    </DataTemplate>
  </TabControl.ItemTemplate>
</TabControl>

如您所见,它使用 Caliburn.Micro 绑定到 ViewModel,但我认为这无关紧要。 如何在右侧的此控件上添加一个按钮以添加新的 TabItems?我正在寻找简单的解决方案。我已经搜索过这个,但我没有找到一个简单的实现。

谢谢

【问题讨论】:

标签: wpf xaml caliburn.micro


【解决方案1】:

您可以将ItemsSource 设置为CompositeCollection,在标签的开头使用CollectionContainer,在末尾设置一个显式TabItem,这样可以在单击时添加新项目(+-tab 为在某些浏览器中)。

【讨论】:

  • 我试过这个,但绑定似乎不起作用。我有一个 BindableCollection,我听说你只能绑定可冻结的集合。
  • @errorcode007:CollectionContainer 中没有DataContext,您不能使用ElementNameRelativeSource (see this question)。您当然可以在 VM 中创建集合并使用简单的分配。
  • @errorcode007:IEditableCollectionView 也仅用于此用例,请参阅评论中链接到的副本,有比这更好的解决方案。
  • 使用此解决方案处理SelectedItem 的最佳方法是什么?当我单击新选项卡时,我目前遇到错误,因为它试图将我的显式 TabItem 转换为 CompositeCollectionItemSource 绑定到的类型。
  • @NathanFriend:不确定,也许您可​​以在TabItem 上设置一些属性以使其不可选择(禁用部件/可聚焦性,诸如此类)。或者,您可以绑定到 object 类型的属性并创建另一个返回 &lt;raw property&gt; as &lt;yourtype&gt; 的正确类型的属性,因此对于新项目选项卡,这将只是 null
猜你喜欢
  • 2011-03-28
  • 1970-01-01
  • 1970-01-01
  • 2016-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多