WPF - 突出显示ListBox中的一行

时间:2013-06-11 18:35:09

标签: c# .net wpf listbox wpf-controls

我对WPF很新,所以这可能是一个简单的问题。

我有ListBox与定义的样式,字体和整个其余的东西。我想在那里突出显示一行,但问题是所有行都是以编程方式添加的,所以我不能只编辑行属性并更改例如前景collor(这就足够了)。我知道目标行ID,但我找不到任何方法来访问其ListItemBox对象。要访问我使用的特定项目:

((MyClass)(Playlist.Items[i])).MyProperty = 0; //Access the i element of ListBox named Playlist

甚至可能吗?我在这里和其他网站上搜索了解决方案,但在我的情况下没有任何帮助。

感谢您的帮助。

编辑: 我不是要选择行,而是要改变它的前景色。

3 个答案:

答案 0 :(得分:2)

您可以使用DataTemplate和DataTrigger。您的DataTemplate定义了列表框中每个项目的外观(TextBlock,Image等)。 DataTrigger将标记列表框中每个项目的特定数据条件,并相应地更改DataTemplate的样式(如前景色)。这假设您的ListBox被数据绑定到MyClass的集合,其中包含名为MyProperty的属性。

<DataTemplate>
    <TextBlock Text="{Binding MyProperty}"/>
<DataTemplate.Triggers>
    <DataTrigger Binding="{Binding Path=ID}">
        <DataTrigger.Value>
            303216
        </DataTrigger.Value>
      <DataTrigger.Setters>
        <Setter Property="Foreground" Value="Navy"/>
      </DataTrigger.Setters>
    </DataTrigger>
</DataTemplate.Triggers>

</DataTemplate>

http://msdn.microsoft.com/en-us/library/system.windows.datatemplate.triggers.aspx

答案 1 :(得分:0)

使用Blend设计SCRATCH中的列表框控件模板,它将帮助您更改列表框中所选项目的前景色。此外,Blend是WPF UI设计的绝佳工具,请检查它。

答案 2 :(得分:0)

如果您无法为此实施适当的MVVM解决方案,则可以从ListBoxItem的{​​{1}}属性获取Items。如果ListBox是数据绑定的(使用ListBox属性),则自动生成的每个ItemsSource都将其ListBoxItem属性设置为集合中的项绑定到DataContext属性。你可以在那里评估它。但是,我不推荐这种方法。如果可能,请使用适当的MVVM解决方案。

ItemsSource