WPF TabControl在开始时没有选择的项目

Posted

技术标签:

【中文标题】WPF TabControl在开始时没有选择的项目【英文标题】:WPF TabControl no selected Item on start 【发布时间】:2016-09-22 18:12:24 【问题描述】:

我正在使用 WPF 选项卡控件来显示从视图模型绑定的项目。

默认情况下,在开始时选择列表的第一项,但我不希望在开始时选择任何项目。我可以将 OnSelectionChanged 事件中的 SelectedItem 设置为 null,然后在开始时未选择任何项目,但随后无法再手动选择项目。

public partial class ProjectScopeMain : Window

  private bool firstStart = true;

  public ProjectScopeMain()
  
    this.Initialized += this.ProjectScopeMain_Initialized;
    this.InitializeComponent();
  

  private void ProjectScopeMain_Initialized(object sender, System.EventArgs e)
  
    this.TabControlSettings.SelectionChanged += TabControlSettingsOnSelectionChanged;
  

  private void TabControlSettingsOnSelectionChanged(object sender, EventArgs e)
  
      this.TabControlSettings.SelectedItem = null;
  

  private void ButtonCreate_Click(object sender, System.Windows.RoutedEventArgs e)
  
    this.Close();
  

我的 XAML 代码。 SelectedIndex=-1 不起作用

        <customControls:TabControl x:Uid="tabControlSettings" x:Name="TabControlSettings" 
                                   prism:RegionManager.RegionName="x:Static infrastructure:RegionNames.ProjectScopeTabsRegion" 
                                   TabStripPlacement="Left" Style="DynamicResource TabControlStyle" 

                                   ItemContainerStyle="DynamicResource TabItemVerticalProjectScopeStyle" SelectedIndex="-1"/>

【问题讨论】:

我没有看到任何 mvvm - 你的绑定在哪里? 在您的 xaml 中将 SelectedIndex 设置为 -1 我不相信 TabControl 允许您没有选择任何选项卡。您可能需要实现一种隐藏内容的方法,直到用户单击选项卡 【参考方案1】:

我不相信选项卡控件让您没有选择任何内容。一个简单的解决方法是创建一个具有折叠可见性的空选项卡,并在您希望清除选项卡控件时导航到它。这将导致显示选项卡的内容(在这种情况下为空)并且不存在标题。

<TabControl Name="MyTabControl" SelectedIndex="0">
    <TabItem Header="" Visibility="Collapsed">
        <!--There's nothing here-->
    </TabItem>
    <TabItem Header="Item 1">
        <TextBlock Text="Some item 1" />
    </TabItem>
    <TabItem Header="Item 2">
        <TextBlock Text="Some item 2" />
    </TabItem>
</TabControl>

你可以“清除”它:

MyTabControl.SelectedIndex = 0;

由于您希望绑定子项,我想您需要先将子项合并到资源中。

【讨论】:

【参考方案2】:

您可以通过将IsSelected 属性设置为false 来取消选择任何TabItem。一旦没有选择任何TabItems,TabControl 的内容将为空白。

【讨论】:

【参考方案3】:

您可以通过将 SelectedTab 属性设置为 nullptr 来选择任何内容。

https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.tabcontrol.selectedtab?view=net-5.0

代表所选标签页的 TabPage。如果没有选择标签页,则值为空。

【讨论】:

问题是针对 WPF,而不是 winforms。【参考方案4】:

订阅TabControlLoaded事件然后将SelectedItem设置为null:

<TabControl Loaded="TabControl_OnLoaded">
    <TabItem Header="page 1" Content="page 1" />
    <TabItem Header="page 2" Content="page 2" />
</TabControl>
private void TabControl_OnLoaded(object sender, RoutedEventArgs e)

    ((TabControl)sender).SelectedItem = null;

即使您将SelectedItem 绑定到 ViewModel 中的属性,它也会起作用,但是在加载页面后的片刻,您将在那里获得一个非空值,然后是空值,但是从什么我已经看到它没有引起任何奇怪的闪烁或任何事情,所以它可能没问题。

在 .NET Framework 4.8 上测试

【讨论】:

以上是关于WPF TabControl在开始时没有选择的项目的主要内容,如果未能解决你的问题,请参考以下文章

WPF Adorner 在TabControl切换TabItem时消失

WPF Adorner 在TabControl切换TabItem时消失

WPF多行TabControl而不重新排列行

xaml / wpf TabControl如何使用屏幕的100%拉伸

如何确保我的 WPF TabControl 在至少包含一个选项卡时始终具有选定的选项卡?

如何将 TabControl 的项目绑定到 wpf 中的可观察集合?