Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 5. říjen 2011, 12:48:20 Předmět: WPF ListBox - custom styl |
|
|
Čau,
mám tu jeden nepříjemný problém: práci s WPF.
Rád bych vytvořil ListBox, který bude mít vlastní typ itemu. Tyto itemy bych ale rád přidával z programu. Pokusil jsem se vytvořit ItemTemplate v xaml, ale popravdě, nevím, jak se to přesně používá. Vím, že můžu vytvořit custom control (což je zase nový xaml, nový .cs...), ale snad to jde i jinak...
Zkusil jsem asi všecko, hledal jsem na netu několik hodin. Možná mi teď někdo pošle veselý odkaz na google, kde to bude na první stránce. Doufám, že opravdu pošle!
(OT: připadá Vám to ještě jako programování? Tyhle ojeby a googlení?) _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
Icek
Založen: 29. 07. 2007 Příspěvky: 45 Bydliště: Banov 375
|
Zaslal: 5. říjen 2011, 13:54:15 Předmět: |
|
|
ListBox má vlastnost ItemTemplate. Ta se použije k vytvoření visualů pro všechny položky z vlastnosti ItemsSource. Kdyžtak napiš v čem přesně máš problém.
Jednoduchá šablona (předpokládá že položky v seznamu mají vlastnost Name):
kód: |
<ListBox ItemsSource="{TvujZdroj}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
|
|
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 5. říjen 2011, 14:33:08 Předmět: |
|
|
Díky, problém je v tom, že nevím přesně tyhle věci:
1) Jakého typu má být "ItemsSource" Má to být nějaký list, nebo tak něco? Jak by to pak fungovalo třeba pro TreeView?
2) Jak přidám položku z kódu?
listBox.Items.Add(new ListBoxItem()) ? - bude mít pak ten custom styl? Stáh jsem jakýsi demo, kde měli krásně nastylovanej listBox, ale tlačítko AddItem přidalo sprostej text...to mě zklamalo. _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
Icek
Založen: 29. 07. 2007 Příspěvky: 45 Bydliště: Banov 375
|
Zaslal: 5. říjen 2011, 15:51:10 Předmět: |
|
|
- ItemsSource je typu IEnumerable, takže do této vlastnosti můžeš nastavit v podstatě cokoliv (list/array/seznam).
- neřeš přidávání do ListBoxu, ale použij nějakou implementaci listu která oznamuje změny, když budeš takovou kolekci potom měnit, ListBox na to bude reagovat.
-pro TreeView platí uplně to samé, s tím rozdílem že šablona se definuje malinko jinak, v podstatě tam jen musíš navíc definovat jak se dostat na "nižší úroveň".
-vlastnost Items je typu CollectionView, což je něco jako "pohled na seznam dat", na ní se nastavuje/projevuje řazení/seskupování atd... |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 6. říjen 2011, 09:20:21 Předmět: |
|
|
Díky, zkusím to. Principy jsou to dobrý, ale pokud to člověk nemá zažitý, tak rovnou dělat nějakej projekt (a snažit se to udělat správně) celkem bolí :-). Ale to už si foukám svojí bolístku..:-) _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 6. říjen 2011, 10:33:27 Předmět: |
|
|
Tyjo to je fakt pruda, pořád to nejde. Kdyby to aspoň zahlásilo, že to nemůže nějakej binding najít... Můžeš mi prosím ještě poradit?
kód: |
cs:
public class Shit
{
public Shit(string n)
{
Name = n;
Children = new List<Shit>();
}
public string Name { get; set; }
public IList<Shit> Children { get; set; }
}
xaml:
<TreeView ItemsSource="{Binding Path=TheShit}" Name="tw1">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type w:Shit}" ItemsSource="{Binding Children}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}" />
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
|
V okně vytvořím (před InitializeComponent();) nějakej jednoduchej strom z Shitů. Okno má public propertu TheShit.
Nechápu...mám nějakej tutoriál, kde to dělají právě takhle a funguje to. Něco jsem asi přehlíd. Připadám si jako trouba.
EDIT Sorry, už to mám! Musí se nastavit DataContext v kódu..myslel sem, že to stačí nějak z toho xamlu....Díky za nakopnutí. _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
|