C# WPF如何将不同样式附加到最后一个子项

C# WPF如何将不同样式附加到最后一个子项,c#,wpf,user-interface,data-binding,wpf-controls,C#,Wpf,User Interface,Data Binding,Wpf Controls,我有一个包含多个按钮的包装袋。 所有按钮都有相同的基本样式来定义其基本外观。 每个按钮的右侧都有一个可见的边框。但是我想使用样式删除最后一个按钮的边框 我认为这很简单。WPF对我来说是新的,所以我想了解它。 我在互联网上找到的解决方案适用于不同的情况。这些解决方案都与ListBox或ItemContainer有关,它们通过索引为一些列表项设置样式 我不想只在最后一个按钮上添加另一个样式键,因为这不是动态的,而且WrapPanel会根据应用程序的状态动态填充按钮 这是我的代码: <Windo

我有一个包含多个按钮的包装袋。 所有按钮都有相同的基本样式来定义其基本外观。 每个按钮的右侧都有一个可见的边框。但是我想使用样式删除最后一个按钮的边框

我认为这很简单。WPF对我来说是新的,所以我想了解它。 我在互联网上找到的解决方案适用于不同的情况。这些解决方案都与ListBox或ItemContainer有关,它们通过索引为一些列表项设置样式

我不想只在最后一个按钮上添加另一个样式键,因为这不是动态的,而且WrapPanel会根据应用程序的状态动态填充按钮

这是我的代码:

<Window.Resources>
        <Style x:Key="lastTabStyle" TargetType="Button">
            <Setter Property="BorderThickness" Value="0" />
        </Style>

        <Style x:Key="tabButton" TargetType="Button">
            <Setter Property="Background" Value="#FF21588B" />
            <Setter Property="BorderThickness" Value="0 0 1 0" />
            <Setter Property="Foreground" Value="#fff" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Button">
                        <Border Background="{TemplateBinding Background}" Padding="20 10 20 10">
                            <ContentPresenter HorizontalAlignment="left" VerticalAlignment="Center" />
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Background" Value="#FF266095" />
                </Trigger>
            </Style.Triggers>
        </Style>
        <Style x:Key="tabButtonSelected" TargetType="Button">
            <Setter Property="Background" Value="#FF3474B0" />
            <Setter Property="BorderThickness" Value="0" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Button">
                        <Border Background="{TemplateBinding Background}" Padding="10 8">
                            <ContentPresenter HorizontalAlignment="left" VerticalAlignment="Center" />
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Window.Resources>

还有包装纸:

<WrapPanel VerticalAlignment="Bottom" x:Name="topTabs">
    <Button Style="{StaticResource tabButton}">Button 1</Button>
    <Button Style="{StaticResource tabButton}">Button 2</Button>
    <Button Style="{StaticResource tabButton}">Button 3</Button>
</WrapPanel>

按钮1
按钮2
按钮3
…但我想使用样式删除最后一个按钮的边框

然后定义另一种样式并将其应用于最后一个
按钮
,或者简单地设置(“覆盖”)最后一个
按钮的
边框厚度
属性:

<WrapPanel VerticalAlignment="Bottom" x:Name="topTabs">
    <Button Style="{StaticResource tabButton}">Button 1</Button>
    <Button Style="{StaticResource tabButton}">Button 2</Button>
    <Button Style="{StaticResource tabButton}" BorderThickness="0">Button 3</Button>
</WrapPanel> 

按钮1
按钮2
按钮3

本地值优先于样式设置的值:

您能给我们看一下您的一些代码吗?我不确定我是否理解正确-您想在按钮上保留样式
tabButton
,并用不同的内容覆盖它吗?不一定。这只是我的一次尝试。我想我应该创建一个样式选择器什么的?动态填充wrappanel的通常方法是使它成为某种itemscontrol的itemspresenter。然后将(绑定到itemssource的observablecollection的项)模板化为按钮。这就是为什么你找到的样本会这样做。想想看,其中一个很可能就是我写的一个样本。