我有一个 ListBox
,我在其中为其项目定义了一个 DataTemplate
:
<ListBox.ItemTemplate>
<DataTemplate>
<Border>
<TextBlock Text="{Binding Name}" />
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
我用来将元素添加到 ListBox
的类如下:
public class MyItem
{
public string Name
{ get; set; }
}
现在我需要更改 ListBox
项目的背景,例如当项目已被选中时:
private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.AddedItems.Count == 1)
{
var item = e.AddedItems.First() as MyItem;
}
}
问题是该项目的类型为 MyItem
,而我还需要访问 Border
和 TextBlock
对象。
最佳答案
您可以在 Border
样式上使用别致的 RelativeSource
绑定(bind):
<Border.Style>
<Style TargetType="Border">
<Style.Triggers>
<DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListBoxItem}}" Value="True">
<Setter Property="Background" Value="Pink"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
这将创建一个 DataTrigger
,它将绑定(bind)到父 ListBoxItem
的 IsSelected
属性,当它被选中时,它将设置Border
的背景颜色为 Pink
。
关于c# - 数据绑定(bind)后访问 ListBox 项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37609554/