FocusManager Kelas
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Kelas pembantu yang memungkinkan manajemen global tindakan fokus dan peristiwa di semua elemen dalam aplikasi.
public ref class FocusManager sealed
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class FocusManager final
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class FocusManager
Public NotInheritable Class FocusManager
- Warisan
- Atribut
Persyaratan Windows
Rangkaian perangkat |
Windows 10 (diperkenalkan dalam 10.0.10240.0)
|
API contract |
Windows.Foundation.UniversalApiContract (diperkenalkan dalam v1.0)
|
Contoh
Gunakan TryMoveFocus untuk melintasi antara elemen UI menggunakan tombol panah.
private void Page_KeyUp(object sender, KeyRoutedEventArgs e)
{
if (e.Key == Windows.System.VirtualKey.Up)
{
// Mimic Shift+Tab when user hits up arrow key.
FocusManager.TryMoveFocus(FocusNavigationDirection.Previous);
}
else if (e.Key == Windows.System.VirtualKey.Down)
{
// Mimic Tab when user hits down arrow key.
FocusManager.TryMoveFocus(FocusNavigationDirection.Next);
}
}
Keterangan
Sebaiknya gunakan fokus UIElement merutekan peristiwa alih-alih peristiwa FocusManager jika memungkinkan.
FocusManager ditujukan untuk skenario tingkat lanjut di mana elemen tertentu dalam aplikasi tidak menerima peristiwa yang menggelegak dari UIElement. Misalnya, objek "overlay" visual seperti Popup, Tooltip, atau MenuFlyout yang muncul sebagai bagian dari UI aplikasi tetapi sebenarnya merupakan cakupan fokus mereka sendiri dan bukan bagian dari hierarki pohon visual. Dalam kasus Popup, ini terjadi ketika Anda secara terprogram mengatur IsOpen ke true dan fokus bergerak masuk dan keluar dari popup.
Berikut adalah beberapa markup dasar untuk mengilustrasikan contoh:
<Page …>
<Grid …>
<Popup …>
<StackPanel Name="StackPanel3" …>
<TextBlock Text="StackPanel3" />
<Button Content="Button5" …/>
</StackPanel>
</Popup>
<TextBlock Text="Grid" … />
<StackPanel Name="StackPanel1" …>
<TextBlock Text="StackPanel1" …/>
<Button Content="Button1" …/>
<Button Content="Button2" … />
</StackPanel>
<StackPanel Name="StackPanel2" …>
<TextBlock Text="StackPanel2" …/>
<Button Content="Button3" … />
<Button Content="Button4" … />
</StackPanel>
</Grid>
</Page>
Dalam hal ini, Popup berisi StackPanel3, yang, pada gilirannya, berisi Button5. Ketika IsOpen diatur ke true dan fokus berpindah dari Button1 ke Button5, peristiwa LosingFocus dan LostFocus melintasi pohon visual (StackPanel1, Grid, dan Halaman mendapatkan kedua peristiwa ini). Namun, hanya StackPanel3 yang menerima peristiwa GettingFocus dan GotFocus berikutnya yang bergelombang dari Button5 (Grid dan Page tidak, karena mereka tidak berada dalam hubungan induk-anak dengan Popup).
Aplikasi dapat memiliki beberapa elemen dengan fokus logis (tergantung pada jumlah cakupan fokus). Namun, hanya satu elemen dalam aplikasi yang dapat memiliki fokus keyboard.
Mungkin ada beberapa elemen dengan fokus logis, tetapi hanya satu elemen dengan fokus logis per cakupan fokus. Elemen dengan fokus logis tidak selalu memiliki fokus keyboard, tetapi elemen dengan fokus keyboard memang memiliki fokus logis.
Riwayat versi
Versi Windows | Versi SDK | Nilai ditambahkan |
---|---|---|
1703 | 15063 | FindFirstFocusableElement |
1703 | 15063 | FindLastFocusableElement |
1703 | 15063 | FindNextElement(FocusNavigationDirection) |
1703 | 15063 | FindNextElement(FocusNavigationDirection,FindNextElementOptions) |
1703 | 15063 | TryMoveFocus(FocusNavigationDirection,FindNextElementOptions) |
1803 | 17134 | TryFocusAsync |
1803 | 17134 | TryMoveFocusAsync(FocusNavigationDirection) |
1803 | 17134 | TryMoveFocusAsync(FocusNavigationDirection,FindNextElementOptions) |
1809 | 17763 | GettingFocus |
1809 | 17763 | GotFocus |
1809 | 17763 | KehilanganFocus |
1809 | 17763 | LostFocus |
1903 | 18362 | GetFocusedElement(XamlRoot) |
Metode
FindFirstFocusableElement(DependencyObject) |
Mengambil elemen pertama yang dapat menerima fokus berdasarkan cakupan yang ditentukan. |
FindLastFocusableElement(DependencyObject) |
Mengambil elemen terakhir yang dapat menerima fokus berdasarkan cakupan yang ditentukan. |
FindNextElement(FocusNavigationDirection) |
Mengambil elemen yang harus menerima fokus berdasarkan arah navigasi yang ditentukan. |
FindNextElement(FocusNavigationDirection, FindNextElementOptions) |
Mengambil elemen yang harus menerima fokus berdasarkan arah navigasi yang ditentukan (tidak dapat digunakan dengan navigasi tab, lihat keterangan). |
FindNextFocusableElement(FocusNavigationDirection) |
Mengambil elemen yang harus menerima fokus berdasarkan arah navigasi yang ditentukan. |
FindNextFocusableElement(FocusNavigationDirection, Rect) |
Mengambil elemen yang harus menerima fokus berdasarkan arah navigasi dan persegi panjang petunjuk yang ditentukan. |
GetFocusedElement() |
Mengambil elemen di UI yang memiliki fokus. |
GetFocusedElement(XamlRoot) |
Mengambil elemen terfokus dalam kontainer pulau Xaml. |
TryFocusAsync(DependencyObject, FocusState) |
Secara asinkron mencoba untuk mengatur fokus pada elemen ketika aplikasi diinisialisasi. |
TryMoveFocus(FocusNavigationDirection) |
Mencoba mengubah fokus dari elemen dengan fokus ke elemen yang dapat difokuskan berikutnya ke arah yang ditentukan. |
TryMoveFocus(FocusNavigationDirection, FindNextElementOptions) |
Mencoba mengubah fokus dari elemen dengan fokus ke elemen yang dapat difokuskan berikutnya ke arah yang ditentukan, menggunakan opsi navigasi yang ditentukan. |
TryMoveFocusAsync(FocusNavigationDirection) |
Secara asinkron mencoba mengubah fokus dari elemen saat ini dengan fokus ke elemen yang dapat difokuskan berikutnya ke arah yang ditentukan. |
TryMoveFocusAsync(FocusNavigationDirection, FindNextElementOptions) |
Secara asinkron mencoba mengubah fokus dari elemen saat ini dengan fokus ke elemen yang dapat difokuskan berikutnya ke arah yang ditentukan dan tunduk pada opsi navigasi yang ditentukan. |
Acara
GettingFocus |
Terjadi sebelum elemen benar-benar menerima fokus. Peristiwa ini dinaikkan secara sinkron untuk memastikan fokus tidak dipindahkan saat peristiwa bergelombang. |
GotFocus |
Terjadi ketika elemen dalam elemen kontainer (cakupan fokus) menerima fokus. Kejadian ini dinaikkan secara asinkron, jadi fokus mungkin bergerak sebelum gelembung selesai. |
LosingFocus |
Terjadi sebelum fokus berpindah dari elemen saat ini dengan fokus ke elemen target. Peristiwa ini dinaikkan secara sinkron untuk memastikan fokus tidak dipindahkan saat peristiwa bergelombang. |
LostFocus |
Terjadi ketika elemen dalam elemen kontainer (cakupan fokus) kehilangan fokus. Kejadian ini dinaikkan secara asinkron, jadi fokus mungkin bergerak lagi sebelum gelembung selesai. |