【问题标题】:How to determine index of current ListBox item from DataTemplate?如何从 DataTemplate 确定当前 ListBox 项的索引?
【发布时间】:2010-12-16 18:30:55
【问题描述】:

我有一个列表框。现在我想以这样的方式编写一个 DataTemplate,first 项目将具有红色背景和白色背景用于其他项目。我想我需要编写一个 DataTrigger,但我不知道如何确定 DataTemplate 是否应用于第一项。

【问题讨论】:

    标签: wpf listbox datatrigger listboxitem


    【解决方案1】:

    items 控件有一个交替计数,您可以使用它来设置样式

    看看here

    <Style TargetType="{x:Type ListBoxItem}">
        <Style.Triggers>
            <Trigger Property="ItemsControl.AlternationIndex" Value="0">
                <Setter Property="Background" Value="LightBlue"></Setter>
            </Trigger>
            <Trigger Property="ItemsControl.AlternationIndex" Value="1">
                <Setter Property="Background" Value="LightGreen"></Setter>
            </Trigger>
        </Style.Triggers>
    </Style>
    

    享受吧!

    【讨论】:

    • 这是一个很棒的功能,感谢您的信息。但我只需要第一项具有红色背景,而不是 (itemIndex % AlternationCount) == 0 的每个项目。当然,我可以将 AlternationCount 绑定到 ItemsSource.Count,但没有更好的如何做到这一点?
    • 您概述的内容听起来可以接受,全部在 xaml 中。它完成了工作,你可以继续做更好的事情。其他人可能会想出一个更优雅的解决方案。您可以使用第一个绑定绑定到当前项目和第二个祖先绑定进行多重绑定,绑定到列表框的 itemssource。然后在您的转换器中,您可以检查项目的索引是什么。但是您上面的解决方案都在 xaml 中。我总是喜欢可读性。它在 xaml 中显而易见,而不是锁定在转换器中
    • 无需将 AlternationCount 绑定到 ItemsSource.Count:只需在 XAML 中将其设置为 Int32.MaxValue。 (我更喜欢 AlternationCount="2147483647" 而不是使用“{x:Static sys:Int32.Maxvalue}”,因为它更快,并且大多数程序员都可以识别 2^31-1)。
    猜你喜欢
    • 2013-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 2011-12-01
    • 2016-03-11
    相关资源
    最近更新 更多