我不确定这是否只是默认的WPF标签控件行为,或者是否有办法禁用它。
我有一个如下定义的标签控件:
<TabControl TabStripPlacement="Left"
Background="Transparent"
ItemsSource="{Binding Path=AvailableProducts}"
SelectedValuePath="Name"
SelectedValue="{Binding Path=SelectedProduct, Mode=TwoWay}">
AvailableProducts是产品列表。例如:
Foo
Bar
Baz
最初,SelectedProduct null ,但是当显示标签控件时,它会自动选择 Foo 。我想要的是根本没有选择标签。
标签控件是否总是选择第一个标签?
更新
我添加了一些示例代码,显示了我所描述的内容。
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TabControl SelectedIndex="1">
<TabItem Header="TAB 1">
<Button>TEST</Button>
</TabItem>
<TabItem Header="TAB 2">
<TabControl TabStripPlacement="Left"
Background="Transparent"
ItemsSource="{Binding Path=AvailableProducts}"
SelectedValuePath="Name"
SelectedValue="{Binding Path=SelectedProduct, Mode=TwoWay}"/>
</TabItem>
</TabControl>
</Grid>
</Window>
using System.Collections.Generic;
namespace WpfApplication1
{
public partial class MainWindow
{
private List<Product> _availableProducts = new List<Product>();
public MainWindow()
{
SelectedProduct = null;
InitializeComponent();
_availableProducts.Add(new Product("Foo"));
_availableProducts.Add(new Product("Bar"));
_availableProducts.Add(new Product("Baz"));
DataContext = this;
}
public List<Product> AvailableProducts
{
get
{
return _availableProducts;
}
}
public string SelectedProduct { get; set; }
}
public class Product
{
public Product(string name)
{
Name = name;
}
public string Name { get; set; }
public override string ToString()
{
return Name;
}
}
}
如果您运行上面的代码,应用程序将以“TAB 2”显示,并且未选择任何选项卡Foo / Bar / Baz。但是,如果你改变了
<TabControl SelectedIndex="1">
到
<TabControl SelectedIndex="0">
并运行应用程序,它从“TAB 1”开始,当您切换到“TAB 2”时,第一个选项卡被选中(Foo)。
我不明白为什么如果你开始使用“TAB 2”它会按照我的预期工作,但如果你从“TAB 1”开始然后切换到“TAB 2”,默认情况下会选择一个标签。
答案 0 :(得分:1)
我刚刚遇到了同样的问题。我知道这是一个老问题,但我想我会把答案留在这里给未来的我。
在 xaml 中使用加载的偶数:
<TabControl Loaded="SheetTabs_Loaded"></TabControl>
在“.xaml.cs”中创建方法:
private void SheetTabs_Loaded(object sender, RoutedEventArgs e)
{
var tabControl = (TabControl)sender;
tabControl.SelectedIndex = 0;
}
答案 1 :(得分:1)
从 NET5.0 开始,它似乎可以使用
<TabControl SelectedIndex="0">
...
</TabControl>
但是当我也使用 SelectedItem 时它不起作用。 只需使用“空白”SelectedIndex,它就起作用了。
答案 2 :(得分:0)
选项卡控件始终显示其中一个选项卡的内容,因此如果您没有明确告诉它哪个选项卡,它将使用第一个选项卡。你根本不能显示任何标签。
您可以尝试隐藏/禁用标签/标签控件,直到选择了产品。