Megosztás a következőn keresztül:


Stílus a vezérlők fókuszához és a FocusVisualStyle-hoz

A Windows Presentation Foundation (WPF) két párhuzamos mechanizmust biztosít egy vezérlő vizuális megjelenésének módosításához, amikor a billentyűzet fókuszát kapja. Az első mechanizmus az, hogy olyan tulajdonság-beállítókat használunk a stílusban vagy sablonban, amelyet a vezérlőre alkalmazunk, mint például a IsKeyboardFocused tulajdonság esetében. A második mechanizmus egy külön stílus biztosítása a FocusVisualStyle tulajdonság értékeként; a "fókuszálási vizuális stílus" egy külön vizuális fát hoz létre egy díszítőelem számára, amely a vezérlő fölé rajzol, ahelyett, hogy lecserélné a vezérlő vagy más felhasználói felületi elem vizuális fáját. Ez a témakör azokat a forgatókönyveket ismerteti, ahol ezek a mechanizmusok megfelelőek.

A fókusz vizuális stílusának célja

A fókuszvizualizációs stílus funkció egy gyakori "objektummodellt" biztosít a vizuális felhasználói visszajelzések bevezetéséhez a billentyűzet bármely felhasználói elemére való navigálás alapján. Ez anélkül lehetséges, hogy új sablont alkalmaz a vezérlőre, vagy ismerné a sablon adott összetételét.

Mivel azonban a fókuszvizualizációs stílus funkció a vezérlősablonok ismerete nélkül működik, a fókuszvizualizációs stílust használó vezérlőkhöz megjeleníthető vizuális visszajelzések szükségszerűen korlátozottak. A funkció valójában egy másik vizuális fa (egy díszítő elem) átfedése a vezérlő sablonja által létrehozott vizuális fán, amelyet a sablon renderelése hoz létre. Ezt a különálló vizualizációfát egy olyan stílussal definiálhatja, amely kitölti a FocusVisualStyle tulajdonságot.

A fókusz vizuális stílusának alapértelmezett viselkedése

A fókuszvizualizációs stílusok csak akkor működnek, ha a fókuszműveletet a billentyűzet kezdeményezte. Minden egérművelet vagy programozott fókuszmódosítás letiltja a fókusz vizuális stílusainak módját. A fókuszmódok közötti különbségekkel kapcsolatos további információkért lásd Fókusz áttekintésecímű témakört.

A vezérlők témái tartalmazzák az alapértelmezett fókusz vizuális stílust, amely a téma összes vezérlőjének fókuszvizualizációs stílusává válik. Ezt a témastílust a statikus kulcs FocusVisualStyleKeyértéke azonosítja. Ha saját fókusz vizuális stílust deklarál az alkalmazás szintjén, ezzel lecseréli az alapértelmezett stílus viselkedést, ami a témákból ered. Másik lehetőségként, ha a teljes témát definiálja, akkor ugyanazt a kulcsot kell használnia a teljes téma alapértelmezett viselkedésének stílusának meghatározásához.

A témákban az alapértelmezett fókusz vizuális stílusa általában nagyon egyszerű. Az alábbiak egy hozzávetőleges közelítés:

<Style x:Key="{x:Static SystemParameters.FocusVisualStyleKey}">
  <Setter Property="Control.Template">
    <Setter.Value>
      <ControlTemplate>
        <Rectangle StrokeThickness="1"
          Stroke="Black"
          StrokeDashArray="1 2"
          SnapsToDevicePixels="true"/>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

Mikor érdemes fókuszvizualizációs stílusokat használni?

Elméletileg a vezérlőkre alkalmazott fókuszvizualizációs stílusok megjelenésének következetesnek kell lennie az irányítástól a vezérlésig. A koherencia biztosításának egyik módja, ha csak akkor módosítja a fókuszvizualizáció stílusát, ha egy teljes témát ír le, ahol a témában definiált vezérlők vagy ugyanazt a fókuszvizualizációs stílust kapják, vagy egy olyan stílus valamilyen változatát, amely vizuálisan kapcsolódik az irányítástól a vezérlésig. Másik lehetőségként használhatja ugyanazt a stílust (vagy hasonló stílust) a lap vagy a felhasználói felület minden billentyűzetre összpontosítható elemének stílusához.

A téma részét nem képező egyéni vezérlőstílusok FocusVisualStyle beállítása nem a fókuszvizualizációs stílusok tervezett használata. Ennek az az oka, hogy a vezérlők közötti inkonzisztens vizuális viselkedés zavaró felhasználói élményt eredményezhet a billentyűzet fókuszával kapcsolatban. Ha a billentyűzetfókuszra vonatkozóan olyan vezérlőspecifikus viselkedéseket szeretne tervezni, amelyek egy témán belül szándékosan nem koherensek, sokkal jobb megközelítés az, ha az egyes beviteli állapottulajdonságokat, például a IsFocused vagy IsKeyboardFocused-et, stílusokban használja triggerekkel.

A fókuszvizualizációs stílusok kizárólag a billentyűzetfókuszhoz használhatók. Így a fókuszvizualizációs stílusok az akadálymentesség egyik típusa. Ha bármilyen fókusztípus felhasználói felületi változásait szeretné módosítani, akár egérrel, billentyűzettel, akár programozott módon, akkor ne használjon fókuszvizualizációs stílusokat, hanem használjon beállítókat és triggereket olyan stílusokban vagy sablonokban, amelyek az általános fókusztulajdonságok( például IsFocused vagy IsKeyboardFocusWithin) értékéből működnek.

Fókusz vizuális stílusának létrehozása

A fókuszvizuális stílushoz létrehozott stílusnak mindig a TargetType a Controlközül kell rendelkeznie. A stílusnak elsősorban egy ControlTemplate-t kell tartalmaznia. Nem adja meg azt a céltípust, amelyhez a fókuszvizuális stílus a FocusVisualStyle-hoz van rendelve.

Mivel a céltípus mindig Control, a stílust az összes vezérlőre közösen vonatkozó tulajdonságok alkalmazásával kell meghatározni (a Control osztály és annak alaposztályai tulajdonságait használva). Olyan sablont kell létrehoznia, amely megfelelően fog működni egy felhasználói felületi elem átfedéseként, és amely nem fedi el a vezérlő funkcionális területeit. Ez általában azt jelenti, hogy a vizuális visszajelzésnek a vezérlő margóján kívül kell megjelennie, vagy ideiglenes vagy zavaró effektusként, amely nem blokkolja a találattesztelést azon a vezérlőn, amelyen a fókuszvizualizáció stílusa van alkalmazva. A sablonkötésben használható tulajdonságok, amelyek hasznosak az átfedési sablon méretezésének és elhelyezésének meghatározásához, például ActualHeight, ActualWidth, Marginés Padding.

A fókuszvizualizációs stílus használatának alternatívái

Olyan helyzetekben, amikor a fókuszvizuális stílus használata nem megfelelő, például ha csak egyetlen vezérlőt szeretne formázni, vagy ha nagyobb befolyást szeretne gyakorolni a vezérlősablonra, számos más akadálymentes tulajdonság és technika áll rendelkezésre, amelyek vizuális viselkedést tudnak létrehozni a fókusz változásaira reagálva.

Az eseményindítókat, a beállítókat és az eseménybeállítókat részletesen tárgyaljuk a Stílus és templatingrészben. Az irányított eseménykezelést Irányított események áttekintésecímű témakörben tekintheti meg.

BillentyűzetFókuszálvaVan

Ha kifejezetten érdekli a billentyűzetfókusz, a IsKeyboardFocused függőség tulajdonság használható Triggertulajdonsághoz. A stílusban vagy sablonban lévő tulajdonság-eseményindítók megfelelőbb technikák a billentyűzetfókusz viselkedésének meghatározásához, amely kifejezetten egyetlen vezérlőhöz tartozik, és amelyek vizuálisan nem felelnek meg más vezérlők billentyűzetfókusz-viselkedésének.

Egy másik hasonló függőségi tulajdonság a IsKeyboardFocusWithin, amelyet akkor érdemes használni, ha vizuálisan ki szeretné hívni, hogy a billentyűzetfókusz valahol a összeállításon belül vagy a vezérlő funkcionális területén belül van. Elhelyezhet például egy IsKeyboardFocusWithin eseményindítót, hogy a több vezérlőt csoportosító panel másképp jelenik meg, annak ellenére, hogy a billentyűzetfókusz pontosabban az adott panel egy adott elemére összpontosít.

Az eseményeket GotKeyboardFocus és LostKeyboardFocus is használhatja (valamint azok előzetes verziójú megfelelőit). Ezeket az eseményeket használhatja egy EventSetteralapjaként, vagy írhat kezelőket az eseményekhez a kód mögötti fájlban.

Egyéb fókusztulajdonságok

Ha azt szeretné, hogy a fókuszváltás minden lehetséges oka vizualizációs viselkedést váltson ki, akkor egy beállítót vagy eseményindítót a IsFocused függőségi tulajdonságra, vagy a GotFocushasznált LostFocus vagy EventSetter eseményekre kell alapoznia.

Lásd még