.[ ČeskéHry.cz ].
WPF ListBox - custom styl

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> .NET
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č

PříspěvekZaslal: 5. říjen 2011, 12:48:20    Předmět: WPF ListBox - custom styl Odpovědět s citátem

Č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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Icek



Založen: 29. 07. 2007
Příspěvky: 45
Bydliště: Banov 375

PříspěvekZaslal: 5. říjen 2011, 13:54:15    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
]semo[



Založen: 29. 07. 2007
Příspěvky: 1526
Bydliště: Telč

PříspěvekZaslal: 5. říjen 2011, 14:33:08    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Icek



Založen: 29. 07. 2007
Příspěvky: 45
Bydliště: Banov 375

PříspěvekZaslal: 5. říjen 2011, 15:51:10    Předmět: Odpovědět s citátem

- 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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
]semo[



Založen: 29. 07. 2007
Příspěvky: 1526
Bydliště: Telč

PříspěvekZaslal: 6. říjen 2011, 09:20:21    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



Založen: 29. 07. 2007
Příspěvky: 1526
Bydliště: Telč

PříspěvekZaslal: 6. říjen 2011, 10:33:27    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> .NET Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna