私は、の代わりにCanvas
を使用するようにItemsPanelTemplate
を上書きするListBox
で作業しています。 ListBoxItems
にはDataTemplate
があり、コンバータを使用してキャンバス上の各ListBoxItem
の外観と位置を定義します。 ListBox
がバインドされているコレクションにアイテムを追加すると、別のUIElement
をキャンバスに追加できます。 ListBoxItem
のコンバーターの外でこれを達成できますか?WPF:ItemsPanelTemplateがキャンバスであるListBoxにUIElementを追加しますか?
私のリソースセクションでは、このようなものです:
<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コントロール:
<ListBox x:Name="lstAwesome" ItemsSource="{Binding Source={StaticResource someCollection}}"/>
そして、リストボックスがバインドされているコレクション:I場合は、だから、
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.
}
したがって、データバインドされたリストボックスによってItemsPanelに使用されているキャンバスにUIElementsを追加できますか?プログラムで、そのListBoxがバインドされているコレクションにアイテムを追加するときは?
私は大変感謝しています。あなたのItemTemplate
があなたの項目に基づいて変更したい場合、あなたはItemTemplateSelector
を設定しているItemTemplate
へを決めることができ
<ListBox.ItemTemplate>
<DataTemplate>
<Rectangle Width="{Binding Width}" Height="{Binding Height}" />
</DataTemplate>
</ListBox.ItemTemplate>
:
ちょっとアンディ、これをチェックしていただきありがとうございます。そして、はい、私のためにアイテムが正しく表示されます。私が質問しているのは、UIElementsをキャンバスに追加することができるかどうかです。*さらに、* ListItemsに追加します。私はcnvAwesomeへの参照を得ることができないようです(xaml参照) –
Canvasに項目を追加するためにItemsPanelTemplateを変更することはできますか?そうでなければ、ListBoxItemごとにコントロールを1つ追加したいのであれば、idursunの方法に従うことをお勧めします。また、DataTemplateを変更して、アイテムをコレクションに追加するたびに追加のコントロールが自動的に追加されるようにします。 – Andy
私はidursunの例に従いたいと思いますが、これらのUIElementsは手続き的に実行時に追加する必要があります。具体的には、ListBoxがバインドされているコレクションに項目が追加されたときです。 ListBoxが使用するItemsPanelのハンドルを取得できず、UIElementsを追加できません。私は本当に助けに感謝し、私は私の問題をより明確にすることができれば教えてください。 –