Wpf, фокус введення

У світі Windows користувач може працювати в будь-який момент часу лише з одним елементом управління. Елемент, який в даний момент отримує натискання клавіші користувачем, має фокус введення. Іноді такий елемент виглядає трохи по-іншому. Наприклад, кнопка WPF, що має фокус, набуває синього відтінку.

Щоб елемент керування міг отримувати фокус, його властивість Focusable повинно мати значення true. За замовчуванням це так для всіх елементів управління. Цікаво, що властивість Focusable визначено як частина класу UIElement: це означає, що інші елементи, які не є елементами управління, теж можуть отримувати фокус. Зазвичай в класах, які не є елементами управління, властивість Focusable за замовчуванням має значення false. Але йому можна присвоїти значення true. Спробуйте зробити це на прикладі контейнера компонування на зразок StackPanel: коли він отримає фокус, навколо панелі з'явиться пунктирна рамка.

Щоб перемістити фокус з одного елемента на інший, користувач може натиснути кнопку миші або клавішу і клавішами управління курсором. У попередніх середовищах розробки програмісти докладали багато зусиль, щоб клавіша передавала фокус зрозумілим чином (зазвичай зліва направо, а потім зверху вниз у вікні), і щоб при першому відображенні вікна фокус передавався потрібного елементу управління. У WPF така додаткова робота потрібна дуже рідко, тому що тут для реалізації послідовності переходів використовується ієрархічна компонування елементів.

По суті, при натисканні клавіші відбувається перехід до першого нащадку в поточному елементі або, якщо поточний елемент не має (більше) нащадків, до наступного елементу на тому ж рівні. Наприклад, серія натискань клавіші табуляції в вікні, в якому є два контейнери StackPanel, перебирає всі елементи управління в першому контейнері StackPanel, а потім всі елементи управління в другому.

Якщо необхідно управляти послідовністю переходів, можна задати властивість TabIndex кожного елемента управління, щоб пронумерувати їх в потрібному порядку. Елемент з нульовим значенням властивості TabIndex отримує фокус першим, а потім - елементи з великим значенням цієї властивості (наприклад, 1, 2, 3 і т.д.). При наявності декількох елементів з однаковими значеннями TabIndex WPF виконує автоматичну передачу фокуса, коли фокус отримує найближчий елемент в послідовності.

За замовчуванням властивість TabIndex у всіх елементах управління має значення Int32.MaxValue. Це означає, що можна призначити певний елемент в якості стартової точки у вікні, присвоївши його властивості TabIndex значення 0. Для інших елементів у вікні залишається автоматична навігація, і користувач буде переходити по ним від даної стартової точки в порядку визначення цих елементів.

Властивість TabIndex визначено в класі Control, там же, де і IsTabStop. Властивості IsTabStop можна привласнити значення false, щоб виключити елемент управління з послідовності переходів. Різниця між IsTabStop і Focusable полягає в тому, що елемент управління з властивістю IsTabStop, рівним false, може отримати фокус іншим шляхом - або програмно (коли в коді викликається метод Focus ()), або при натисканні кнопкою миші.

Елементи управління, які є невидимими або заблокованими (затінені) зазвичай не включаються в послідовність переходів і не активізуються, незалежно від значень властивостей TabIndex, IsTabStop і Focusable. Щоб приховати або заблокувати елемент управління, використовуються властивості Visibility і IsEnabled, відповідно.

Схожі статті