XAML.cz Magazín moderních technologií založených na XAML

Novinky ve WPF 4 – Vlastní Caret a selekce

Napsáno pro WPF od Jarda Jirava  [20.05.2010]

Je tady další pokračování seriálu představující novinky ve WPF 4.0, tentokrát se podívám na to, co se změnilo ve zpracování textu a práce s ním. Těch novinek je maličko více než v případě Bindingu, ale všechny stojí určitě za to, a pokud jste se rozmýšleli zda použít právě WPF pro vaši další aplikaci a práce s textem byla jednou z položek na záporné straně, můžete tuto škrtnout.

WPF umožňuje různé hrátky s uživatelským prostředím a pokud jste zdatný grafik a designer UI, pak vám mohli některé vlastnosti scházet k dokonalosti a dovedení uživatelského prožitku z používání aplikace na vrchol.

Podívejme se tedy, jak si vytvořit vlastní caret a vlastní výběr (selekci).

Vlastní caret

Caret představuje blikající čáru v textovém vstupním poli označující místo, kde se nachází kurzor – místo, od kterého se začne psát text. Tento kurzor je standardně černý, jak je vidět na následujícím obrázku

standardní caret

Ale co když máme nějaký vlastní použitý design a černá barva kurzoru se nám nehodí, třeba jen proto, že není dostatečně kontrastní. Nyní máme možnost nastavit vlastní štětec – Brush – který bude použit pro vykreslení tohoto kurzoru. Můžeme tak volit mezi různým barevným provedením a výsledek pak může vypadat jak na následujícím obrázku

vlastní caret

Na této ukázce je použit LinearGradientBrush, nic vám však nebrání použít jakýkoliv jiný štětec [1], [2], [3].

Ještě schází ukázka použití, které je velice jednoduché

<TextBox.CaretBrush>
    <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
        <GradientStop Offset="0" Color="Yellow" />
        <GradientStop Offset="0.5" Color="LightBlue" />
        <GradientStop Offset="1.0" Color="Red" />
    </LinearGradientBrush>
</TextBox.CaretBrush>

Vlastní výběr – selekce

V tuto chvíli máme nějakým způsobem nastylovaný kurzor, kterým určujeme pozici pro vstup textu. Ale jakmile uživatel provede výběr již napsaného textu, stále se nám zobrazí v oné jednolité, lehce průhledné barvě, jak naznačuje další obrázek

standardní selekce

což se nám samozřejmě nemusí líbit, ať už ze stejného důvodu, jako v případě černého kurzoru, který může být špatně kontrastní vůči okolním prvkům, nebo jen chceme provedený výběr označit uživateli v souladu s celým uživatelským rozhraním či mu nabídnout možnost si definovat vlastní barvy.

Obdobně jako u kurzoru tak můžeme definovat vlastní štětec, který bude použit pro výběr. Já jsem ponechal nastavení shodné s kurzorem a můj výběr tak vypadá následovně

vlastní selekce

Opět ještě uvedu část XAML kódu, který jsem použil uvnitř deklarace TextBox elementu

<TextBox.SelectionBrush>
    <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
        <GradientStop Offset="0" Color="Yellow" />
        <GradientStop Offset="0.5" Color="LightBlue" />
        <GradientStop Offset="1.0" Color="Red" />
    </LinearGradientBrush>
</TextBox.SelectionBrush>

Závěrem

Pro vytváření poutavých uživatelských rozhraní, ze kterých má mít uživatel ten správný zážitek je dobré myslet i na maličkosti. Jednou z takových maličkostí je právě i možnost nastylování kurzoru, případně použití vlastního barevného schématu pro výběr textu. V tomto článku jsem chtěl demonstrovat postup, který je možné použít od verze WPF 4.0. Příště se opět podíváme na zpracování textu a novinek, které se v poslední verzi WPF objevily.

Komentáře

ukládám komentář, vyčkejte prosím..
  1. Buďte první, kdo napíše komentář.

@xamlcz

  • RT @jvanrhyn: XAML, It's a bit like olives. Takes a while to get used to. But once you're used to it. It is actually pretty good. <3 XAML
  • RT @moser_christian: WPF Inspector 0.9.7 is released. It supports .NET 3.5 and 4.0 The project is now open source and available on CodeP ...
  • Jeff Handley oznámil vydání WCF RIA Services v.1.0 SP1 RTM http://bit.ly/gOgckn ke stažení na http://bit.ly/gVAXdK
  • jedna výzva pro Brno. Byl někdo z vás na přednášce o RIA v MS Akvárku? Dejte o sobě vědět. Děkuji
  • také jste uvažovali o tom, že zkusíte na projekt použít Caliburn Micro nebo naopak Prism 4? A co tak obojí, šlo by to nebo ne? Již brzy