C#/WPF:为什么选项卡无法正确聚焦
我有一个选项卡控件
<TabControl Height="Auto" Grid.Row="1" ItemsSource="{Binding Tabs}" IsSynchronizedWithCurrentItem="True">
,它绑定到 ViewModel
中的 Tabs
。我还使用 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 个选项卡时,当我创建新选项卡时,选项卡会正确聚焦
当没有选项卡时,新选项卡似乎无法正确聚焦。请注意选项卡标题
我该如何解决此问题?或者是什么导致了这种行为?显示文本框(选项卡内容),但标题不像其选择的那样呈现
更新
它适用于新文件/项目...嗯...必须是一些相关代码...我可能会重做该部分.. 。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
除非将
TabControl.ItemsSource
绑定到ICollectionView
,否则IsSynchronizedWithCurrentItem="True"
没有任何意义。我无法判断将绑定从 ObservableCollection 更改为 ICollectionView 是否可以解决您的问题,但这就是我设置数据绑定选项卡控件的方式。
另一种方法是公开一个新属性
并将 TabControl 的
SelectedItem
绑定到CurrentTabViewModel
IsSynchronizedWithCurrentItem="True"
has no meaning unless you bind yourTabControl.ItemsSource
to anICollectionView
.I can't tell if changing your binding from ObservableCollection to ICollectionView will solve your problem, but that is how I have setup my databound tabcontrol.
An alternative could be to expose a new property
and bind TabControl's
SelectedItem
toCurrentTabViewModel
如果没有初始化单选项卡集合的代码,它只是猜测。
解决方法是设置 tabView 的 SelectedIndex = 0 ->最初选择第一个选项卡。
Without the code, that initializes the single-tab-collection, it's just guessing.
A Workaround for you would be setting SelectedIndex of the tabView = 0 -> first tab is selected initially.