我不确定这是否只是默认的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”,就会默认选择一个选项卡。
TabItem
的背景。当启动应用程序时,我没有看到任何选项卡项的背景更改,并且只有在显式选择选项卡项时才会更改背景。当您说“Foo”默认选中时,您是否在TabContent面板中看到了“Foo”的内容? - Suresh