Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk bemutatja, hogyan használhatja a mutató pozícióját a WinUI- és a Windows App SDK-alkalmazásokban dinamikus "kurzorhoz ragaszkodó" élmények létrehozásához.
Előfeltételek
Feltételezzük, hogy ismeri az alábbi cikkekben tárgyalt fogalmakat:
Miért érdemes kurzorpozíció-alapú élményeket létrehozni?
A fluent tervezési nyelven nem az érintés az egyetlen módja a felhasználói felülettel való interakciónak. Mivel a WinUI-alkalmazások több eszközforma-tényezőre is kiterjedhetnek, a végfelhasználók más beviteli módokkal, például egérrel és tollal is kommunikálhatnak az alkalmazásokkal. A többi bemeneti mód pozícióadatainak használata lehetőséget ad arra, hogy a végfelhasználók úgy érezzék, még jobban kapcsolódnak az alkalmazáshoz.
A mutató pozícióalapú felületei lehetővé teszik, hogy a mutató bemeneti modalitásának képernyőbeli pozícióját kihasználva további mozgási és felhasználói felületi élményeket hozzon létre az alkalmazás számára. Ezek a szolgáltatások gyakran további kontextust és visszajelzést adhatnak a végfelhasználóknak a felhasználói felület viselkedéséről és szerkezetéről. A felhasználói élmény már nem egyirányú stream, hanem egy kétirányú streamgé válik, ahol a végfelhasználó bemenetet biztosít a bemeneti móddal, és az alkalmazás felhasználói felülete válaszolhat.
Néhány példa:
Reflektorfény pozíciójának animálása a kurzor követéséhez
Kép elforgatása egy mutató pozíciója alapján
A PointerPositionPropertySet használata
Ezeket a szolgáltatásokat a PointerPositionPropertySet használatával hozhatja létre. Ez a PropertySet egy UIElement számára jön létre, hogy fenntartsa az egérmutató pozícióját, miközben a UIElement pozitívan van tesztelve. A pozíció értéke az UIElement koordináta-területéhez viszonyítva (a 0,0< pozíció >az UIElement bal felső sarkában található). Ezután az animációban beállított tulajdonságot használhatja egy másik tulajdonság mozgásának mozgatásához.
A mutató különböző beviteli módjainak mindegyikéhez számos bemeneti állapot tartozik, amelyekben a bemenet olyan helyzetben van, ahol a pozíció változhat: Helyezés, Lenyomva, Lenyomva és Áthelyezve. A PointerPositionPropertySet csak az egér és a toll rámutatási, lenyomott és áthelyezett állapotában tartja fenn a mutató pozícióját.
Az első lépések általános lépései:
- Határozza meg azt a UIElement elemet, amelyben szeretné nyomon követni a mutató pozícióját.
- A PointerPositionPropertySet elemcsoport elérése az ElementCompositionPreview segítségével.
- Az UIElement objektumot adja át az ElementCompositionPreview.GetPointerPositionPropertySet metódusnak.
- Hozzon létre egy ExpressionAnimation tulajdonságot, amely a PropertySet Pozíció tulajdonságára hivatkozik.
- Ne felejtse el beállítani a referenciaparamétert!
- Egy CompositionObject tulajdonság megcélzása a ExpressionAnimation használatával.
Megjegyzés:
Javasoljuk, hogy a GetPointerPositionPropertySet metódusból visszaadott PropertySet tulajdonsághalmazt rendelje hozzá egy osztályváltozóhoz. Ez biztosítja, hogy a tulajdonságkészletet ne tisztítsa meg a Szemétgyűjtés, így nincs hatással a hivatkozott Kifejezésanimációra. Az ExpressionAnimations nem tart fenn erős hivatkozást az egyenletben használt objektumokra.
Example
Vegyünk egy példát, ahol az egér és a toll bemeneti modalitásának lebegő pozícióját használjuk egy kép dinamikus elforgatására.
A kép egy UIElement, ezért először szerezzünk egy hivatkozást a PointerPositionPropertySet-re.
_pointerPositionPropSet = ElementCompositionPreview.GetPointerPositionPropertySet(UIElement element);
Ebben a mintában két kifejezés van érvényben.
- Olyan kifejezés, amelyben a kép a mutató távolsága alapján forog a kép közepétől. Minél távolabb, annál nagyobb a forgatási szög.
- Olyan kifejezés, amelyben a forgatási tengely a mutató pozíciója alapján változik. Azt szeretné, hogy a forgatási tengely merőleges legyen a pozíció vektorára.
Itt meghatározhatja a két kifejezést: az egyiket a Forgásszög tulajdonságra, a másikat pedig a Forgástengely tulajdonságra. A PointerPositionPropertySet-re úgy hivatkozik, mint bármely más PropertySetre.
Ebben a példában kifejezéseket készít a ExpressionBuilder osztályokkal.
// using EF = ExpressionBuilder.ExpressionFunctions;
// || DEFINE THE EXPRESSION FOR THE ROTATION ANGLE ||
var hoverPosition = _pointerPositionPropSet.GetSpecializedReference
<PointerPositionPropertySetReferenceNode>().Position;
var angleExpressionNode =
EF.Conditional(
hoverPosition == new Vector3(0, 0, 0),
ExpressionValues.CurrentValue.CreateScalarCurrentValue(),
35 * ((EF.Clamp(EF.Distance(center, hoverPosition), 0, distanceToCenter) % distanceToCenter) / distanceToCenter));
_tiltVisual.StartAnimation("RotationAngleInDegrees", angleExpressionNode);
// || DEFINE THE EXPRESSION FOR THE ROTATION AXIS ||
var axisAngleExpressionNode = EF.Vector3(
-(hoverPosition.Y - center.Y) * EF.Conditional(hoverPosition.Y == center.Y, 0, 1),
(hoverPosition.X - center.X) * EF.Conditional(hoverPosition.X == center.X, 0, 1),
0);
_tiltVisual.StartAnimation("RotationAxis", axisAngleExpressionNode);
Lásd még
Windows developer