Add to Favorites

3.Šablony & Trigry

Templates

Zatímco styly slouží pouze ke kosmetickým úpravám prvků, pomocí vlastnosti Template můžeme vzhled celé kontroly úplně přepsat.

Podívejme se na standardní WPF tlačítko.

WPF Button


Skládá se z textového pole a obdelníku. U tlačítka můžeme změnit barvu pozadí nebo velikost písma, protože tlačítko má tyto vlastnosti FontSize a Background. Pokud ale chceme, aby tlačítko mělo jiný vzhled (například aby bylo kulaté), nezbývá nám nic jiného než přepsat šablonu (Button.Template) této kontroly, neboli znovu nadefinovat z jakých prvků se má skládat.

WPF Button Template

  <Button Width="150" Height="50">
    <Button.Template>
      <ControlTemplate>
        <Grid>
          <Ellipse Fill="LightGreen" />
          <Label VerticalAlignment="Center"
                 HorizontalAlignment="Center"
                 Content="Button" />
        </Grid>
      </ControlTemplate>
    </Button.Template>
  </Button>
Povinný element je ControlTemplate, do kterého vložíme prvky, ze kterých se má naše kontrola nově skládat.

* Obsah uvedený mezi tagy odpovídá vždy některé z vlastností dané kontroly. Například u Labelu jsou tedy tyto zápisy ekvivalentní
<Label>můj text</Label> 
a
<Label Content="můj text" />

Šablony ve stylech

Ve stylech pracujeme s vlastností Template stejně jako s jinými vlastnostmi. Podívejme se na jednoduchý příklad, ve kterém pomocí stylu přepíšeme šablonu všech tlačítek.


Styles & Templates

  <StackPanel Orientation="Horizontal">
    <StackPanel.Resources>
      <!-- Common style -->
      <Style TargetType="Button">
        <Setter Property="Template">
          <Setter.Value>
            <ControlTemplate>
              <Grid Width="50" Height="30">
                <Ellipse Fill="{TemplateBinding Button.Background}" />
                <Label Content="{TemplateBinding Button.Content}"
                       HorizontalAlignment="Center"
                       VerticalAlignment="Center" />
              </Grid>
            </ControlTemplate>
          </Setter.Value>
        </Setter>
      </Style>
    </StackPanel.Resources>
    <Button Content="New" />
    <Button Content="Open" />
    <Button Content="Save" Background="LightGreen" />
    <Button Content="Close" Background="LightGreen" />
  </StackPanel>

Vsimněte si zápisu hodnot vlastností Fill a Content. Pozadí elipsy a obsah tlačiítka tady není určen přímo v šabloně, ale pomocí TemplateBinding se použije hodnota z kontroly.

Pomocí TemplateBinding tedy pracujeme uvnitř šablony s hodnotami zadanými u kontroly. V tomto případě jsme použili barvu zadanou ve vlastnosti Background tlačítka na vyplnění elipsy.
<Ellipse Fill="{TemplateBinding Button.Background}"  />
                                ^^
<Button Content="Save" Background="LightGreen"  />

Obdobným způsobem je načten i text.

* Všiměte si, že u tlačítek, u kterých není vlastnost Background zadaná, se použila hodnota ze Bdního vzhledu.




Dependency properties

Dříve než přejdeme k trigrům, musíme si vysvětlit koncept tzv. 'Dependency properties'. Jedná se o speciální vlastnosti kontrol. Pokud nadefinujeme třídě novou vlastnost (property), můžeme její hodnotu pouze číst nebo zapisovat. Dependency properties jsou ale rozšířeny o další funkce a můžeme pak použít na takovou vlastnost databinding, "animovat" její hodnotu (více o tomto až v dalších kapitolách) a nebo použít property trigger. Co je zajímavého na těchto vlastnostech pro nás nyní je, že hodnota takovéto vlastnosti může být také závislá na vlastnostech jiných kontrol. Jak to přesně funguje?

Příklad:
  <Border TextElement.Foreground="Red" TextElement.FontSize="20">
    <StackPanel>
      <Label Foreground="Green">
        <TextBlock>Green?!</TextBlock>
      </Label>
      <TextBlock>Red?!</TextBlock>
    </StackPanel>
  </Border>

Dependency Properties

Co je na této aplikaci nestandardní? Ačkoliv TextBlocky nemají nastavenou barvu textu (Foreground), není barva jejich textu standardní. Jedná se totiž o Dependency properties a hodnoty těchto vlastností jsou převzaty z některého z nadřazených elementů.

TextBlock s červeným textem tedy přebral barvu z elementu StackPanel, který tuto hodnotu přebral z elementu Border.



Trigry

Trigry (anglicky Triggers) nám v XAMLu umožní reagovat na údálosti kontrol, na hodnoty vlastností kontrol nebo na datové hodnoty. Podle toho taky rozlišujeme trigry na:

  • Property triggers - reagují na hodnotu vlastnosti (property) kontroly
  • Event triggers - reagují na události
  • Data triggers - reagují na hodnotu proměné


Trigry se používají nejčastěji ve spojení se styly. Podívejme se na použití všech tří typů ve stylech.

Property trigger

Property trigry reagují pouze na hodnoty dependency properties (vlastnosti) kontroly. V property trigrech můžeme nastavit hodnoty vlastností pomocí elementu Setter a nebo pracovat s animacemi. Jakmile podmínka trigru neplatí, vrátí se hodnoty zpět do původního stavu.

Příklad: Chceme, aby po najetí myší nad tlačítko byl text červený a zvýrazněný. Použijeme vlastnost IsMouseOver tlačítka, která je True pokud je myš nad tlačítkem, v opačném případě je False.

Property Trigger

  <StackPanel>
    <StackPanel.Resources>
      <Style TargetType="Button">
        <Style.Triggers>
          <Trigger Property="Button.IsMouseOver" Value="True">
            <Setter Property="Button.FontWeight" Value="Bold" />
            <Setter Property="Button.Foreground" Value="Red" />
          </Trigger>
        </Style.Triggers>
      </Style>
    </StackPanel.Resources>
    <Button>New</Button>
    <Button>Open</Button>
    <Button>Save</Button>
    <Button>Close</Button>
  </StackPanel>

Setter se tedy vykoná pouze pokud hodnota IsMouseOver je True. Pokud myší z tlačítka odjedeme, tlačítko se vrátí do původního stavu.

* Před názvy vlastností je lepší zadávat typ kontroly



MultiTrigger
MultiTrigry používáme pokud u property trigru potřebujeme zadat více podmínek spuštění, například aby se text tlačítka změnil pouze pokud je kurzor myši nad tlačítkem a zároveň text tlačítka je "Close"

Property Multi-Trigger

  <StackPanel>
    <StackPanel.Resources>
      <Style TargetType="Button">
        <Style.Triggers>
          <MultiTrigger>
            <!-- Conditions -->
            <MultiTrigger.Conditions>
              <Condition Property="Button.IsMouseOver" Value="True" />
              <Condition Property="Button.Content" Value="Close" />
            </MultiTrigger.Conditions>
            <!-- Setter -->
            <Setter Property="Button.FontWeight" Value="Bold" />
            <Setter Property="Button.Foreground" Value="Red" />
          </MultiTrigger>
        </Style.Triggers>
      </Style>
    </StackPanel.Resources>
    <Button>New</Button>
    <Button>Open</Button>
    <Button>Save</Button>
    <Button>Close</Button>
  </StackPanel>

Nyní jsou elementy Setter použity pouze na tlačítko s textem "Close" pokud je kurzor myši nad tlačítkem.



Event trigger

V event trigrech můžeme pracovat pouze s animacemi. Ty probereme až v následujícím díle, proto implementaci animací v následující ukázce můžete vynechat.

Příklad: Po najetí myší nad tlačítko se výška tlačítka změní z původní hodnoty 20px na 30px. Jakmile tlačítko myší opustíme, vrátí se zpět do původní velikosti. Změny velikostí trvají 0.5 sekundy.

  <StackPanel>
    <StackPanel.Resources>
      <Style TargetType="Button">
        <Setter Property="Button.Height" Value="20" />
        <Style.Triggers>
          <!-- Enlarge button -->
          <EventTrigger RoutedEvent="Button.MouseEnter">
            <EventTrigger.Actions>
              <BeginStoryboard>
                <Storyboard>
                  <DoubleAnimation To="30"
                             Storyboard.TargetProperty="Height" 
                             Duration="0:0:0.5" />
                </Storyboard>
              </BeginStoryboard>
            </EventTrigger.Actions>
          </EventTrigger>
          <!-- Back -->
          <EventTrigger RoutedEvent="MouseLeave">
            <EventTrigger.Actions>
              <BeginStoryboard>
                <Storyboard>
                  <DoubleAnimation To="20" 
                             Storyboard.TargetProperty="Height" 
                             Duration="0:0:0.5" />
                </Storyboard>
              </BeginStoryboard>
            </EventTrigger.Actions>
          </EventTrigger>
        </Style.Triggers>
      </Style>
    </StackPanel.Resources>
    <Button>New</Button>
    <Button>Open</Button>
    <Button>Save</Button>
    <Button>Close</Button>
  </StackPanel>




Data trigry

Data trigry nám umožní reagovat na hodnotu proměných v seznamech jako je například ListBox.

Trigry bez stylů?

Proč zde uvádím používání trigrů pouze ve spojení se styly? Proč bychom nemohli používat trigry přímo v kontrolách?

IntelliSence nám při psaní kódu nabídne tento způsob zápisu:

  <Button>
    <Button.Triggers>
      <Trigger Property="Button.IsMouseOver" Value="True">
        <Setter Property="Button.FontSize" Value="20" />
      </Trigger>
    </Button.Triggers>
  </Button>
^^ tento kód ale vyvolá chybu při běhu aplikace

Bohužel WPF (mně z neznámých důvodů) ani ve verzi 3.5 nepodporuje property trigry a data trigry u kontrol (fungují takto pouze event trigry) a tak jediná možnost jak tento nedostatek obejít je použít styly.

Ukázka použití property trigru u jednoho tlačítka pomocí stylů

Triggers

  <StackPanel>
    <Button Content="New">
      <Button.Style>
        <Style>
          <Style.Triggers>
            <Trigger Property="Button.IsMouseOver" Value="True">
              <Setter Property="Button.FontSize" Value="20" />
            </Trigger>
          </Style.Triggers>
        </Style>
      </Button.Style>
    </Button>
  </StackPanel>

Tabulka kdy a kde je možné jednotlivé trigry používat

použíti ve stylech použití v kontrole
Setter Animace Setter Animace
Property trigger ano ano ne ne
Event trigger ne ano ne ano
Data trigger ano ano ne ne


Demo

V následujícím demu spojíme dohromady styly, trigry a šablony a vytvoříme si vlastní vzhled tlačítek v aplikaci.

Demo

  <StackPanel>
    <StackPanel.Resources>
      <Style TargetType="Button">
        <!-- Template -->
        <Setter Property="Button.Template">
          <Setter.Value>
            <ControlTemplate>
              <Border x:Name="myBorder" BorderBrush="Black"
                      BorderThickness="2"
                      CornerRadius="5"
                      Margin="2"
                      Background="{TemplateBinding Button.Background}">
                <ContentControl Content="{TemplateBinding Button.Content}"
                                FontWeight="Bold"
                                HorizontalAlignment="Center" />
              </Border>
              <!-- Triggers -->
              <ControlTemplate.Triggers>
                <Trigger Property="Button.IsMouseOver" Value="True">
                  <Setter Property="Border.Background" Value="Black" 
                          TargetName="myBorder" />
                  <Setter Property="Button.Foreground" Value="White" />
                </Trigger>
              </ControlTemplate.Triggers>
            </ControlTemplate>
          </Setter.Value>
        </Setter>
      </Style>
    </StackPanel.Resources>
    <Button Content="New" />
    <Button Content="Open" />
    <Button Content="Save" />
    <Button Content="Close" Background="Red" />
  </StackPanel>

  1. použili jsme obecný (nepojmenovaný) styl, takže tento vzhled je použit na každé tlačítko ve StackPanelu
  2. přepsali jsme šablonu tlačítka, tzn. museli jsme znovu nadefinovat prvky tlačítka a přidali efekty
  3. obsah tlačítka nemusí být pouze text, ale například i obrázek nebo jiný element, proto pro vypsání Contentu jsme použili element ContentControl; obsah načítáme (TemplateBinding) z vlastnosti Content tlačítka
  4. použili jsme Property trigger - po najetí na tlačítko se změní barva textu a pozadí tlačítka
    • TargetName stanoví prvek v šablone, na který má být element Setter použit; u Button.Foreground nebylo potřeba TargetName použít, protože se jedná o Dependency property takže elementy uvnitř šablony převezmou hodnotu z nadřazených elementů




Závěr

Díky šablonám máme kontroly ve WPF plně pod kontrolou, pokud se nám nelíbí standardní vzhled, můžeme si navolit vlastní a přitom zároveň zachovat funkčnost kontroly. Trigry nám zase umožní vytvářet efekty a reagovat na události nebo vlastnosti kontrol.


)
Komentáře
(
David
9/2/2008 11:29:13 AM
Ahoj, díky za seriál. Prosím o radu: Jakým způsobem nastavit Buttonu nový styl, tak aby pozadím buttonu byl obrázek a zároveň udělat Trigger aby při kliknutí myši na Button se načetl jiný obrázek?? Otázka zda tento postup je vůbec možný. Díky David.

David
9/2/2008 11:48:42 AM
Nebo to spíš řešit tak že místo Buttonu dát Image a nastavit MouseLeftButtonDown ?? Díky. David.

Ales Sturala
9/11/2008 12:56:52 AM
Pres Image bych to nedelal uz jen proto, ze MouseLeftButton se nechova stejne jako Click. Nicmene tady je kod jak to lze udelat: XAML:
<Button Width="40" Height="40" Name="myButton" Click="myButton_Click">
    <Button.Template>
      <ControlTemplate TargetType="Button">
        <Image Source="http://cs.wpfstart.com/_img/winVista_s.png" Name="myButtonImage" />
      </ControlTemplate>
    </Button.Template>
  </Button>
C#:
private void myButton_Click(object sender, RoutedEventArgs e)
        {
            Image buttonImage = myButton.Template.FindName("myButtonImage", myButton) as Image;
            Image image = new Image();
            ImageSourceConverter converter = new ImageSourceConverter();

            buttonImage.Source = (ImageSource)converter.ConvertFromString("http://cs.wpfstart.com/_img/winXP_s.png");
        }
Zobrazit obrazek jako tlacitko lze pres sablonu (template). Nicmene problem nastava jak ho zmenit na udalost Click, protoze Click je event a pres EventTriggery lze spustit jenom animace. Da se to ale resit pres code-behind v C#, kde pomoci FindName() se najde dany obrazek v sablone a nastavi se mu novy zdroj (Source). A protoze ted nevim jak dostat data do image.Source v C#, tak jsem to udelal stejne jak to dela XAML a to jednoduse vlozenim stringu (url) do konvertoru, ktery se uz o vsechno postara.

nezadáno
7/15/2009 7:26:25 PM
Standar!t!ní?

Ales Sturala
8/13/2009 8:32:40 PM
nezadano> Diky, opraveno

fzibsxyihgt
5/17/2010 8:54:21 AM
GDAV5I <a href="http://ushzjzakxzsq.com/">ushzjzakxzsq</a>, [url=http://mgxsjtvhbztm.com/]mgxsjtvhbztm[/url], [link=http://hmsiqhgtpngc.com/]hmsiqhgtpngc[/link], http://lynmcpyjdnpy.com/

btxlgt
5/21/2010 4:47:13 PM
p6DHj0 <a href="http://cjhdwxlgxjtc.com/">cjhdwxlgxjtc</a>, [url=http://gpqgousjmtaq.com/]gpqgousjmtaq[/url], [link=http://oiobyzzxzxtv.com/]oiobyzzxzxtv[/link], http://lewbgvydlruj.com/

Lujwqozh
5/24/2010 1:01:03 PM
, http://vissanjiacademy.com/aspnet_client/system_web/15/kinky-porn156.html Kinky Porn , jolm , http://rukawe.cl/images/icons/48/paris-hilton-fuck-videos64.html Paris Hilton Fuck Videos , osew , http://timberhomesllc.biz/old_site/images/10/old-time-porn-videos85.html Old Time Porn Videos , 1408 , http://cccindia.in/aspnet_client/system_web/11/xxx-clips-creampie170.html Xxx Clips Creampie , jjayp , http://replacebaseboardcovers.com/images/icons/52/free-adult-personal-webcams124.html Free Adult Personal Webcams , %DD , http://ipsolutioncenter.com/cp/Scripts/61/ok-coral109.html Ok Coral , =-PPP , http://syndicatefinanceworld.net/aspnet_client/system_web/984/brandi-love-cumshot102.html Brandi Love Cumshot , :-( , http://nitaigauras.com/aspnet_client/system_web/650/nude-cowboy-photos109.html Nude Cowboy Photos , xlw , http://sof-tek.net/feedback/img_st/35/naked-older-men114.html Naked Older Men , 9964 , http://for-balance.eu/images/icons/861/tamed-teens90.html Tamed Teens , 83344 , http://axiima.com/aspnet_client/system_web/277/photographic-nudes47.html Photographic Nudes , yno ,

Fipxpuiu
5/24/2010 1:36:47 PM
, http://nic-u.com/cp/Scripts/78/creative-webcam45.html Creative Webcam , eyy , http://peterisart.com/cp/scripts/971/squirting-pussy-video122.html Squirting Pussy Video , %OOO , http://employment-applicant.com/feedonfeeds/simplepie/213/sex-training135.html Sex Training , gmuvk , http://tragamonedasgratis.com/images/icons/061/mature-gang-bangs151.html Mature Gang Bangs , >:[[ , http://pizzacall.ca/_images/topMenu/44/free-full-length-porn-videos23.html Free Full Length Porn Videos , 616 , http://sofajunkie.com/images/Thumbnails/42/bizarre-extreme-sex48.html Bizarre Extreme Sex , =P , http://visionsofthecity.com/images/icons/740/gay-leather-sex-gear21.html Gay Leather Sex Gear , oxk , http://biancahome.in/aspnet_client/system_web/24/free-online-sex-games182.html Free Online Sex Games , =O , http://crystalbowlsoundhealer.com/webcalendar/docs/17/sexy-kim-possible57.html Sexy Kim Possible , 78666 , http://employment-applicant.com/feedonfeeds/simplepie/213/melissa-gilbert-free-nude50.html Melissa Gilbert Free Nude , 38879 , http://igpetro.com/aspnet_client/system_web/76/free-gay-cum-shot-movie191.html Free Gay Cum Shot Movie , 084 ,

Ubroflsn
5/24/2010 1:54:23 PM
, http://beachmountainrentals.com/cameras/Cam1_06-11-09@19`15`29/669/pre-teen-loitas12.html Pre Teen Loitas , %-] , http://onlinex.com/images/icons/380/fetish-boobs113.html Fetish Boobs , 93854 , http://rmgindia.com/images/icons/846/fake-nude-celebs83.html Fake Nude Celebs , dphpw , http://icmhsas.org/images/icons/40/sexy-spankings150.html Sexy Spankings , 34758 , http://thehumanimpact.in/website/images/28/minnie-mouse-having-sex4.html Minnie Mouse Having Sex , rqev , http://kaizeninfotech.com/aspnet_client/system_web/429/female-masturbation-dvd190.html Female Masturbation Dvd , :D , http://frauenberg.com/cp/scripts/26/big-black-dicks-with-black-chicks138.html Big Black Dicks With Black Chicks , 396880 , http://philipov.com/images/digits/572/xxx-wifes-to-fuck66.html Xxx Wifes To Fuck , 727 , http://puzzlesolvers.net/aspnet_client/system_web/156/kate-beckinsale-naked-in-haunted160.html Kate Beckinsale Naked In Haunted , >:-PP , http://vewarts.com/images/ads_posters/303/9-year-old-girls-sex15.html 9 Year Old Girls Sex , 8-((( ,

Pxsgnmjm
5/24/2010 2:11:43 PM
, http://lightmyphotos.com/images0/icons/185/free-gay-women-cards7.html Free Gay Women Cards , stbd , http://pacificstrands.com/cp/scripts/861/teen-sex-movie-clips190.html Teen Sex Movie Clips , 8[[[ , http://prevysslife.com/aspnet_client/system_web/16/free-nude-galleries-only60.html Free Nude Galleries Only , etnx , http://1-hosting-solutions.com/images/digits/719/fucking-porn-sex-pussy-anal-free-8979.html Fucking Porn Sex Pussy Anal Free 89 , 68324 , http://tragamonedasgratis.net/old_images/icons/004/nude-pregnant-pictures76.html Nude Pregnant Pictures , %-PP , http://labs-r-it.com/images/icons/26/penis-masturbation-machine18.html Penis Masturbation Machine , 588 , http://devisha.com/images/icons/036/paris-pussy0.html Paris Pussy , 832100 , http://chintanshahca.com/images/icons/140/g-string-bikinis187.html G String Bikinis , =-[[[ ,

Whcqrvyz
5/24/2010 2:29:26 PM
, http://fortdavispecans.com/cp/scripts/85/vista-sucks142.html Vista Sucks , 535 , http://cccindia.in/aspnet_client/system_web/11/nude-granny-gallery8.html Nude Granny Gallery , 4841 , http://bigbendwebdesigns.com/cp/images/948/porno-games50.html Porno Games , pkf , http://uniformespierrejordan.com/aspnet_client/system_web/031/free-one-porn95.html Free One Porn , 8) , http://weiserbuds.com/images/icons/95/sex-video-galleries64.html Sex Video Galleries , :)) , http://rouletterus.com/cp/scripts/901/naked-family-sex-stories18.html Naked Family Sex Stories , uih , http://is-abogados.com/accessibility/includes/43/teens-having-orgams34.html Teens Having Orgams , %PPP , http://adpro1.com/images/icons/927/outcall-sexy-escort-london58.html Outcall Sexy Escort London , izvwt ,

Jxvjgyii
5/24/2010 2:46:42 PM
, http://sterlingheatingandair.com/images/bassclub/094/traylor-howard-nude162.html Traylor Howard Nude , 849 , http://lahomevalue.com/images/_vti_cnf/451/horse-sex-video85.html Horse Sex Video , :-OOO , http://icmhsas.org/images/icons/40/maya-sakura-nude214.html Maya Sakura Nude , 9780 , http://lottery-online.com/bak_images/icons/385/nude-gay-men-pictures115.html Nude Gay Men Pictures , 6860 , http://zngrouppk.com/aspnet_client/system_web/329/sex-bloopers1.html Sex Bloopers , 232310 , http://888wpc.com/cp/scripts/69/movie-alfred-hitchcocks-rope144.html Movie Alfred Hitchcocks Rope , :] , http://businessalliance.in/images/icons/316/free-video-sex-chat66.html Free Video Sex Chat , 3317 , http://businessalliance.in/images/icons/316/naked-pictures-of-keely-hazel30.html Naked Pictures Of Keely Hazel , 345 , http://aavishkarbusiness.com/img/icons/62/interracial-mpegs60.html Interracial Mpegs , 28786 , http://vermontis.org/press/_vti_cnf/45/largest-penis-in-porn122.html Largest Penis In Porn , 622 , http://ghost-images.com/images/icons/55/forced-to-fuck59.html Forced To Fuck , 00879 ,

Irdijzub
5/24/2010 3:21:30 PM
, http://powerfit.eu/images/icons/853/nude-hawaiian-girls58.html Nude Hawaiian Girls , 687 , http://biancahome.in/aspnet_client/system_web/24/old-school-porn15.html Old School Porn , dtgfs , http://houston-websites.com/tools_other/ebay/671/nudebeaches2.html Nudebeaches , 1379 , http://instantkarmaworld.com/images/icons/42/free-gay-boy-pics5.html Free Gay Boy Pics , 8[[ , http://saliba.org/logs/saliba.org/243/models-nude-girls31.html Models Nude Girls , 005 , http://peterisarch.com/images/icons/123/softball-porn112.html Softball Porn , =] , http://bobbiderman.com/images/icons/27/three-girls-on-one-dick56.html Three Girls On One Dick , 96141 , http://senties-chauvet.com/accessibility/includes/186/hot-naked-teen-girls54.html Hot Naked Teen Girls , :-DDD ,

Qweuyhid
5/24/2010 3:39:36 PM
, http://pokerthatsucksTaking Lead Sexually , yscw , http://wsi-mexico.com/CATIMAGES/thumbs/89/best-sexual-positions8.html Best Sexual Positions , %DD , http://lightmyphotos.com/images0/icons/185/sexy-starwars210.html Sexy Starwars , =-P , http://syndicatefinanceworld.net/aspnet_client/system_web/984/high-school-musical-porn58.html High School Musical Porn , 8OO , http://vaservicios.com/accessibility/includes/68/pornography-search-engines119.html Pornography Search Engines , :DD ,

zxvc
7/26/2010 9:45:22 AM
asdf

http://3bsex4407ngq3obk.com
8/9/2010 4:20:22 PM
[url=http://x9958pylzchx6x4s.com/]un9rbmyascc8l09u[/url] [link=http://ah75rcj5rcqdr9no.com/]defy3oarxosedpv4[/link] <a href=http://4aoqhhv114hwo62k.com/>tghkvs085u4llho5</a> http://5onamo0b8c5wrnvy.com/

http://3bsex4407ngq3obk.com
8/10/2010 11:55:38 AM
[url=http://x9958pylzchx6x4s.com/]un9rbmyascc8l09u[/url] [link=http://ah75rcj5rcqdr9no.com/]defy3oarxosedpv4[/link] <a href=http://4aoqhhv114hwo62k.com/>tghkvs085u4llho5</a> http://5onamo0b8c5wrnvy.com/

http://3bsex4407ngq3obk.com
8/10/2010 9:33:55 PM
[url=http://x9958pylzchx6x4s.com/]un9rbmyascc8l09u[/url] [link=http://ah75rcj5rcqdr9no.com/]defy3oarxosedpv4[/link] <a href=http://4aoqhhv114hwo62k.com/>tghkvs085u4llho5</a> http://5onamo0b8c5wrnvy.com/

http://3bsex4407ngq3obk.com
8/12/2010 11:59:07 PM
[url=http://x9958pylzchx6x4s.com/]un9rbmyascc8l09u[/url] [link=http://ah75rcj5rcqdr9no.com/]defy3oarxosedpv4[/link] <a href=http://4aoqhhv114hwo62k.com/>tghkvs085u4llho5</a> http://5onamo0b8c5wrnvy.com/

http://3bsex4407ngq3obk.com
8/22/2010 2:35:44 AM
[url=http://x9958pylzchx6x4s.com/]un9rbmyascc8l09u[/url] [link=http://ah75rcj5rcqdr9no.com/]defy3oarxosedpv4[/link] <a href=http://4aoqhhv114hwo62k.com/>tghkvs085u4llho5</a> http://5onamo0b8c5wrnvy.com/

Vaše jméno
Vaše webová stránka
Povolené tagy jsou [code=C#]...[/code] pro zvýraznění C# kódu a [code=XML]...[/code] pro XML a XAML
Aleš Šturala @ 2007 - 2009