WPF如何为最后一个孩子添加不同的风格

时间:2018-04-06 10:34:47

标签: c# wpf user-interface data-binding wpf-controls

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

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

我不想只为最后一个Button添加另一个样式键,因为它不是动态的,WrapPanel是使用Buttons动态填充的,具体取决于应用程序的状态。

这是我的代码:

<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:

<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 个答案:

答案 0 :(得分:0)

  

...但我想使用样式删除最后一个按钮的边框。

然后定义另一个样式并将其应用于上一个Button或简单地设置(“覆盖”)最后BorderThickness的{​​{1}}属性:

Button

本地值优先于样式设置的值:https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/dependency-property-value-precedence