gpt4 book ai didi

c# - 将样式应用于第一个 child ?

转载 作者:太空狗 更新时间:2023-10-29 21:29:24 24 4
gpt4 key购买 nike

有什么方法可以将样式应用于容器(任何包含子项的东西)的第一个(或最后一个或第 n 个)子项?我正在尝试自定义选项卡项的外观,使第一个选项卡的边框半径与其他项不同。

这是我现在拥有的:

<ControlTemplate TargetType="{x:Type TabItem}">
<Grid>
<Border Name="Border" BorderBrush="#666" BorderThickness="1,1,1,0" CornerRadius="8,8,0,0" Margin="0,0,0,-1">
<TextBlock x:Name="TabItemText" Foreground="#444" Padding="6 2" TextOptions.TextFormattingMode="Display">
<ContentPresenter x:Name="ContentSite" VerticalAlignment="Center" HorizontalAlignment="Center" ContentSource="Header" Margin="12,2,12,2"/>
</TextBlock>
</Border>
</Grid>
</ControlTemplate>

最佳答案

对于 ItemsControl 派生类(例如 TabControl),您可以使用 ItemContainerStyleSelector 依赖属性。设置此依赖属性后,ItemsControl 将为控件中的每个项目调用 StyleSelector.SelectStyle()。这将允许您为不同的项目使用不同的样式。

以下示例更改 TabControl 中的最后一个选项卡项,使其文本为粗体并且比其他选项卡稍大。

首先,新的 StyleSelector 类:

class LastItemStyleSelector : StyleSelector
{
public override Style SelectStyle(object item, DependencyObject container)
{
var itemsControl = ItemsControl.ItemsControlFromItemContainer(container);
var index = itemsControl.ItemContainerGenerator.IndexFromContainer(container);

if (index == itemsControl.Items.Count - 1)
{
return (Style)itemsControl.FindResource("LastItemStyle");
}

return base.SelectStyle(item, container);
}
}

此样式选择器将返回带有键“LastItemStyle”的样式,但仅限于控件中的最后一项。其他项目将使用默认样式。 (请注意,此函数仅使用 ItemsControl 的成员。它也可用于其他 ItemsControl 派生类。)接下来,在您的 XAML 中,您首先需要创建两个资源。第一个资源将是此 LastItemStyleSelector,第二个资源是样式。

<Window.Resources>
<local:LastItemStyleSelector x:Key="LastItemStyleSelector" />

<Style x:Key="LastItemStyle" TargetType="TabItem">
<Setter Property="FontWeight" Value="Bold" />
<Setter Property="FontSize" Value="16" />
</Style>
</Window.Resources>

最后是你的 TabControl:

    <TabControl ItemContainerStyleSelector="{StaticResource LastItemStyleSelector}">
<TabItem Header="First" />
<TabItem Header="Second" />
<TabItem Header="Third" />
</TabControl>

有关详细信息,请参阅 MSDN 文档:

关于c# - 将样式应用于第一个 child ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9444536/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com