3

タブコントロールがあります

<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;
}

複数のタブがある場合、新しいタブを作成すると、タブが適切にフォーカスされます

代替テキスト

タブがない場合、新しいタブは適切にフォーカスされていないようです。タブヘッダーに注意してください

代替テキスト

どうすればこれを修正できますか? または、この動作の原因は何ですか? テキスト ボックス (タブのコンテンツ) は表示されますが、ヘッダーは選択したようにレンダリングされません

アップデート

それは新しいファイル/プロジェクトで動作します...うーん...関連するコードでなければなりません...その部分をやり直すかもしれません...

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をにバインドSelectedItemしますCurrentTabViewModel

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

single-tab-collection を初期化するコードがなければ、推測にすぎません。回避策は、tabView = 0 の SelectedIndex を設定することです -> 最初のタブが最初に選択されます。

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