我正在研究 aListBox
覆盖它ItemsPanelTemplate
以使用 aCanvas
而不是 a StackPanel
。 ListBoxItems
有一个DataTemplate
使用转换器来定义每个ListBoxItem
在画布上的外观和位置。当我将一个项目添加到绑定到的集合中ListBox
时,我希望能够将其他UIElement
s 添加到画布中。我可以在ListBoxItem
's 转换器之外完成此操作吗?
我的资源部分是这样的:
<Style TargetType="ListBox">
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<Canvas x:Key="cnvAwesome">
</Canvas>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="ListBoxItem">
<Setter Property="Canvas.Left" Value="{Binding Path=Position.X}" />
<Setter Property="Canvas.Top" Value="{Binding Path=Position.Y}" />
</Style>
和一个列表框:
<ListBox x:Name="lstAwesome" ItemsSource="{Binding Source={StaticResource someCollection}}"/>
ListBox 绑定到的集合:
public ObservableCollection<SomeType> someCollection {get; set; }
因此,如果我有一种方法可以将项目添加到 ListBox lstAwesome 绑定到的集合 someCollection 中:
private void AddItemToDataboundCollection(SomeType someItem)
{
someCollection.Add(someItem)
// I'd like to add a UIElement to the canvas that the ListBox uses to layout items here.
}
那么,我可以将 UIElements 添加到数据绑定列表框用于 ItemsPanel 的画布中吗?以编程方式,当我将项目添加到 ListBox 绑定到的集合中时?
我将不胜感激任何输入!