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(Microsoft.UI.Xaml.WinUIContract, 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(Microsoft.UI.Xaml.WinUIContract), 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

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 peristiwa yang dirutekan fokus UIElement alih-alih peristiwa FocusManager jika memungkinkan.

FocusManager ditujukan untuk skenario tingkat lanjut di mana elemen tertentu dalam aplikasi tidak menerima peristiwa gelembung 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, berisi PopupStackPanel3, yang, pada gilirannya, berisi Button5. Ketika IsOpen diatur ke true dan fokus berpindah dari Button1 ke Button5, LosingFocus peristiwa dan LostFocus menggelegak melintasi pohon visual (StackPanel1, Grid, dan Page dapatkan kedua peristiwa ini). Namun, hanya StackPanel3 menerima peristiwa dan GotFocus berikutnya yang menggelegak GettingFocus 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.

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. Kejadian ini dinaikkan secara sinkron untuk memastikan fokus tidak dipindahkan saat peristiwa sedang menggelembung.

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. Kejadian ini dinaikkan secara sinkron untuk memastikan fokus tidak dipindahkan saat peristiwa sedang menggelembung.

LostFocus

Terjadi ketika elemen dalam elemen kontainer (lingkup fokus) kehilangan fokus. Kejadian ini dinaikkan secara asinkron, jadi fokus mungkin bergerak lagi sebelum gelembung selesai.

Berlaku untuk

Lihat juga