C # / WPF: почему вкладка не фокусируется должным образом - PullRequest
3 голосов
/ 21 октября 2010

У меня есть вкладка управления

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

Это связано с Tabs в ViewModel. Я также использовал 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;
}

Когда у меня больше одной вкладки, когда я создаю новые вкладки, вкладки фокусируются должным образом

alt text

когда вкладок нет, новые вкладки не отображаются должным образом. обратите внимание на заголовок вкладки

alt text

как я могу это исправить? или что вызывает такое поведение? текстовое поле (содержимое вкладки) отображается, но заголовок не отображается как выбранный

UPDATE

Он работает с новым файлом / проектом ... хм ... должен быть какой-то связанный код ... Я мог бы переделать эту часть ...

Ответы [ 2 ]

1 голос
/ 21 октября 2010

IsSynchronizedWithCurrentItem="True" не имеет смысла, если вы не связываете TabControl.ItemsSource с ICollectionView.

Я не могу сказать, решит ли ваша привязка изменение привязки ObservableCollection на ICollectionView, но именно так я настроил свой tabcontrol с привязкой к данным.

Альтернативой может быть предоставление нового свойства

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

и привязать TabControl SelectedItem к CurrentTabViewModel

<TabControl SelectedItem="{Binding Path=CurrentTabViewModel}" ... />
0 голосов
/ 21 октября 2010

Без кода, который инициализирует коллекцию с одной вкладкой, это только предположение.Обходным решением для вас будет установка SelectedIndex для tabView = 0 -> первая вкладка выбрана изначально.

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