3

我有一个标签控件

<TabControl Height="Auto" Grid.Row="1" ItemsSource="{Binding Tabs}" IsSynchronizedWithCurrentItem="True">

那是必然TabsViewModel。我也曾经CollectionViewSource专注于标签

protected ObservableCollection<TabViewModel> _tabs;
protected ICollectionView _tabsViewSource;

public ObservableCollection<TabViewModel> Tabs
{
    get { return _tabs; }
}
public void OnTabsChanged(object sender, NotifyCollectionChangedEventArgs e)
{
    if (e.NewItems != null && e.NewItems.Count > 0)
        foreach (TabViewModel tab in e.NewItems)
        {
            tab.CloseRequested += OnCloseRequested;
            _tabsViewSource.MoveCurrentTo(tab); // focus newly created tab
        }
    if (e.OldItems != null && e.OldItems.Count > 0)
        foreach (TabViewModel tab in e.OldItems)
            tab.CloseRequested -= OnCloseRequested;
}

当我有超过 1 个选项卡时,当我创建新选项卡时,选项卡会正确聚焦

替代文字

当没有标签时,新标签似乎没有正确聚焦。注意选项卡标题

替代文字

我该如何解决这个问题?或者是什么导致了这种行为?显示了文本框(选项卡内容),但标题不像其选择那样呈现

更新

它适用于一个新的文件/项目......嗯......必须是一些相关的代码......我可能会重做那部分......

4

2 回答 2

1

IsSynchronizedWithCurrentItem="True"除非你将你的绑定TabControl.ItemsSource到一个ICollectionView.

我不知道将绑定从 ObservableCollection 更改为 ICollectionView 是否会解决您的问题,但这就是我设置数据绑定选项卡控件的方式。

另一种方法是公开一个新属性

public TabViewModel CurrentTabViewModel
{
    get
    {
        return _tabs.CurrentItem as TabViewModel:
    }
    set
    {
        _tabs.MoveCurrentTo(value);
    }
}

并将 TabControl 绑定SelectedItemCurrentTabViewModel

<TabControl SelectedItem="{Binding Path=CurrentTabViewModel}" ... />
于 2010-10-21T11:27:42.260 回答
0

如果没有初始化单选项卡集合的代码,那只是猜测。您的解决方法是设置 tabView = 0 的 SelectedIndex -> 最初选择第一个选项卡。

<TabControl Height="Auto" 
  Grid.Row="1" 
  ItemsSource="{Binding Tabs}" 
  IsSynchronizedWithCurrentItem="True" 
  SelectedIndex="0">
于 2010-10-21T11:49:44.683 回答