我想为我的tabitems创建一个具有以下属性的样式: - 第一个tabitem将在左角设置角半径 - 最后一个tabitem将在右角设置角半径
预期结果:
问题1: 所以我需要能够获得模板中当前tabitem的索引(以及tabcontrol中的tabitems数量。
我希望能够以一种风格做到这一点。我目前正在使用3个样式(一个用于第一个,一个用于最后一个,一个用于其他)但在我的应用程序中我经常需要隐藏一个或两个tabitems所以我需要检查是否必须设置一个新的代码中的样式并不真正有用。
问题2:我想在当前所选的tabitem之前更改所有tabitems的样式。
这只能使用一种风格吗?
谢谢
答案 0 :(得分:2)
3个样式部分没问题,你缺少的是StyleSelector
,它将根据ItemIndex选择样式
public class TabItemStyleSelector : StyleSelector
{
public override Style SelectStyle(object item, DependencyObject container)
{
var itemsControl = ItemsControl.ItemsControlFromItemContainer(container);
var itemIndex = itemsControl.ItemContainerGenerator.IndexFromContainer(container);
//first index
if(itemIndex == 0)
{
return (Style)itemsControl.FindResource("FirstTabItemItemStyle");
}
//last index
if (itemIndex == itemsControl.Items.Count - 1)
{
return (Style)itemsControl.FindResource("LastTabItemItemStyle");
}
//other indecies
return (Style)itemsControl.FindResource("OtherTabItemItemStyle");
//return base.SelectStyle(item, container); return this if OtherTabItemItemStyle does not exist
}
}
将其添加到您的资源
<Window.Resources>
<local:TabItemStyleSelector x:Key="TabItemStyleSelector" />
</Window.Resources>
并在TabControl
中将其用作:
<TabControl ItemsSource="{Binding Items}" ItemContainerStyleSelector="{StaticResource TabItemStyleSelector}">
</TabControl>
请注意,上面的选择器适用于任何ItemsControl
而不只是TabControl