/ / A ItemControl bez položkyPresenter (Silverlight) - šablóny, strieborné svetlo, agent na prezentáciu obsahu, agent na prezentáciu položiek

A ItemsControl bez položkyPresenter (Silverlight) - šablóny, silverlight, contentpresenter, itemspresenter

Vytvoril som kontrolu, ktorá zdedila položky ItemControl a kontrolu, ktorú som vykonal pre svoju šablónu nemá položku ItemPresenter. Namiesto toho mám mriežku. Chcem vytvoriť takýto zoznam:


(Položka 1)


(GridSplitter)


(Položka 2)


(GridSplitter)


(Položka 3)


Pretože musím vložiť svoj vlastný GridSplitter medzi položky, preto ho nemôžem používať ItemPresenter a nechajte ma naplniť UI.

Prepíšem metódu OnItemsChanged (), aby som moholnapíš logiku pridávania / odoberania GridSplitter. Naďalej však potrebujem používať triedu ItemContainerGenerator vygenerujte položku ItemTemplate pre moje položky.

Ale keď nie sú pod kontrolou žiadne položkyšablóny, ItemContainerGenerator Nezdá sa, že by fungoval. Keď ju použijem na vygenerovanie položky prvýkrát, vráti sa ContentPresenter s DataTemplate. Potom som ju vložil do mriežky, ktorú mám. Na obrazovke sa však nezobrazí žiadna položka. Ak pridám ďalšiu položku, bude to hádzať pri vložení do mriežky sa zobrazuje chyba, že položka je už vo vizuálnom strome. To je dôvod, prečo si myslím, že ItemContainerGenerator nemôže fungovať bez nástroja ItemPresenter.

Pokúsil som sa preto nahradiť mriežku položkou ItemPresenter. Tentoraz používa svoje zdôrazňuje logiku vytvárania položiek a zobrazuje, čo má robiť. Nie je to však to, čo chcem.

Dôvod, prečo chcem používať ItemContainerGenerator, je ten, že musím vytvoriť Prvky používateľského rozhrania z ItemTemplate, ktoré som definoval v Xaml.

Existuje nejaký spôsob, ako môžem vygenerovať používateľské rozhranie pomocou šablóny položky, ktorú ovládam položky?

odpovede:

0 pre odpoveď č. 1

Ak už prechádzate ťažkosťamipočúvanie OnItemsChanged a manuálne pridávanie obsahu do mriežky, mali by ste vytvoriť UserControl namiesto použitia ItemTemplate a potom vložiť UserControl s jeho DataContext nastaveným na príslušný objekt do Gridu a nemusíte sa obávať zdedenia z ItemsControl.