대신 Canvas
을 사용하기 위해 ItemsPanelTemplate
을 무시하는 ListBox
에서 작업하고 있습니다. ListBoxItems
은 컨버터를 사용하여 캔버스에있는 각 ListBoxItem
의 모양과 위치를 정의하는 DataTemplate
입니다. 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 x:Name="lstAwesome" ItemsSource="{Binding Source={StaticResource someCollection}}"/>
그리고 콜렉션 목록 상자에 바인딩 :
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에 바인딩 된 항목을 컬렉션에 추가 할 때?
나는 모든 의견을 크게 고맙겠습니다!
안녕하세요, 앤디 감사합니다. 그리고 네, 항목도 저에게 맞습니다. 내가 묻는 것은 추가 UIElements를 캔버스에 추가 할 수있는 것입니다. * 또한 ListItems에 추가 * 할 수 있습니다. cnvAwesome에 대한 참조를 얻을 수없는 것 같습니다 (xaml 참조). –
ItemsPanelTemplate을 수정하여 Canvas에 항목을 추가 할 수 있습니까? 그렇지 않으면 ListBoxItem 당 하나의 추가 컨트롤을 추가하려면 idursun의 방법을 따르고 컬렉션에 항목을 추가 할 때마다 추가 컨트롤이 자동으로 추가되도록 DataTemplate을 수정하는 것이 좋습니다. – Andy
idursun의 예제를 따르고 싶습니다. 그러나 이러한 UIElements는 절차 적으로 런타임에 추가해야합니다. 특히 항목이 ListBox에 바인딩 된 컬렉션에 추가되면 ListBox에서 사용하는 ItemsPanel 핸들을 얻을 수없고 UIElements를 추가 할 수 없습니다. 나는 정말 도움을 주셔서 감사 드리며 제 문제를 더 분명하게 할 수 있는지 알려주십시오. –