V druhém dílu se již vrhneme na konkrétní novinky přicházející se Silverlightem 4.

Podpora tisku

Tisk ve webových aplikací byl doposud možný dvěma způsoby. První byla konverze dat do HTML a následné vyvolání tisku. Druhou možností je nechat uživatele stáhnout tiskovou sestavu v alternativním formátu, který uživatel rozpozná a vytiskne si jej sám. Například dokument ve formátu docx pro Microsoft Office Word nebo pdf.

Nová verze Silverlightu přináší možnost dovolující tisk přímo z okna běžící aplikace jako reakce například na stisknutí tlačítka. Nejprve kód:

C#

var prt = new PrintDocument();
prt.PrintPage += (s, args) =>
{

args.PageVisual = element;

};
prt.Print("Jméno sestavy");

VB.NET

Dim prt As New PrintDocument()
AddHandler prt.PrintPage, Sub(s As Object, args As PrintPageEventArgs)

args.PageVisual = element

End Sub

prt.Print("Jméno sestavy")

První vytváříme instanci třídy PrintDocument. Té nastavíme reakci na událost PrintPage vyvolanou při generování dokumentu odesílaného do tiskárny po spuštění metody Print.

Uvnitř události PrintPage pak nastavujeme parametr PageVisual, kterým určujeme tisknutý element. Může to být téměř cokoliv od textového pole přes tlačítko, až po celý dokument. Není tak problém tisknout elementy nezahrnuté v hlavním zobrazeném layoutu. To dává skvělou možnost vytvořit speciálně pro tisk samostatný element v paměti, který bude reprezentovat tisknutý dokument. Další možností je vytvořit v paměti objekt s hlavičkou a patičkou tiskové sestavy a dovnitř tohoto objektu umístit obsah zobrazený na formuláři.

Chceme-li tisknout více stránek, stačí nastavit vlastnost HasMorePages na true a událost PageVisual se bude vyvolávat cyklicky tak dlouho, dokud nepřenastavíme HasMorePages zpět na false.

Pokud požadujete nějaké upřesňování tiskových parametrů, můžeme využít událostí StartPrint (vyvolána těsně před tiskem) a případně po tisku událost EndPrint.

Podpora nových jazyků

Silverlight 4 nyní zahrnuje celou řadu nových exotických jazyků, které doposud chyběly. Ty jsou podporovány jak pro vykreslování textu, tak pro vstup. Pokud tedy využijete k ukládání například do databáze unicodový sloupec, máte zajištěnou podporu od češtiny, přes azbuku, až po písma indioárijckých jazyků.

sl1

Zde je kompletní seznam nových písem a odpovídajících jazyků:

Písmo

Jazyky

Bengali

Bengali, Assamese, Manipuri

Oriya

Oriya

Malayalam

Malayalam

Kannada

Kannada

Tamil

Tamil

Telugu

Telugu

Gujarati

Gujarati

Gurmukhi

Punjabi

Devanagari

Hindi, Marathi, Sanskrit, Konkani, Kashmiri, Nepali, Sindhi

Komponenta ViewBox

Sada layoutovacích komponent byla rozšířena o ViewBox. Ten dává možnost přesně pozicovat a měnit úroveň roztažení, či smršťění nesoucího elementu. Je to velmi vítaný prvek ve vektorovém grafickém prostředí.

Nejvíce nás bude zajímat vlastnost Stretch. Definuje, jakým způsobem se bude vnitřní element zmenšovat, popřípadě zvětšovat. Toto je výčet možných hodnot:

  • None – Vnitřní element nebude nijak velikostně ovlivněn
    sl2
  • Fill – Vnitřní element vyplní celý
    sl3
  • Uniform – Zvětšení nebo zmenšení s dodržením poměru stran
    sl4
  • UniformToFill – Zvětšení nebo zmenšení s dodržením poměru stran a vyplněním
    sl5

Další důležitá vlastnost je StretchDirection definující způsob změny velikosti vnitřního elementu. Zabraňuje totiž obsahu ViewBoxu, aby se zmenšil na menší, či zvětšil větší rozměry než byl v originále. Toto jsou možnosti:

  • Both – Element uvnitř se bude podle velikosti ViewBoxu zmenšovat i zvětšovat
  • DownOnly – Element uvnitř se bude podle velikosti ViewBoxu zmenšovat, nikdy se však nezvětší více, než nad 100% původní velikosti
  • UpOnly – Element uvnitř se bude podle velikosti ViewBoxu zvětšovat, ale nikdy jeho velikost neklesne pod 100% původní velikosti

Například toto je kód, který zobrazí element tlačítka. Díky vlastnostem Stretch a StretchDirection nikdy nezvětší tlačítko nad 100% původní velikosti (DownOnly), ale v případě potřeby jej naopak změnší, aby se vešlo celé do zobrazeného ViewBoxu (Uniform):

<Viewbox Stretch="Uniform" StretchDirection="DownOnly">
<Button Content="Jsem ve ViewBoxu!" />
</Viewbox>

Protože komponenta ViewBox dokáže nést vždy jen jeden element, bude vhodné do něj ve složitějších případech umístit další layoutovací prvek (například Grid).

- Tomáš Jecha


Další díl seriálu:

Webové úterý – Novinky v Silverlight 4 – díl 1.