Bagikan melalui


FocusManager Kelas

Definisi

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
Object Platform::Object IInspectable FocusManager
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.

Berlaku untuk

Lihat juga