RadialController Kelas

Definisi

Mewakili perangkat input roda atau aksesori seperti Surface Dial.

Surface Dial dengan Surface Studio dan Pena.

Dengan faktor bentuk berdasarkan tindakan putar (atau gerakan), Surface Dial dimaksudkan sebagai perangkat input multi-modal sekunder yang melengkapi input dari perangkat utama. Dalam kebanyakan kasus, perangkat dimanipulasi oleh tangan pengguna yang tidak dominan saat melakukan tugas dengan tangan dominan mereka (seperti penintaan dengan pena). Ini tidak dirancang untuk input pointer presisi (seperti sentuhan, pena, atau mouse).

Surface Dial juga mendukung tindakan tekan dan tahan dan tindakan klik. Tekan dan tahan memiliki satu fungsi: tampilkan menu perintah. Jika menu aktif, putar dan klik input diproses oleh menu. Jika tidak, input diteruskan ke aplikasi Anda untuk diproses.

RadialController dan API terkait (lihat akhir topik) memungkinkan Anda menyesuaikan menu perintah terintegrasi dan pengalaman interaksi yang didukung oleh aplikasi Anda.

public ref class RadialController sealed
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 196608)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
class RadialController final
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 196608)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
public sealed class RadialController
Public NotInheritable Class RadialController
Warisan
Object Platform::Object IInspectable RadialController
Atribut

Persyaratan Windows

Rangkaian perangkat
Windows 10 Anniversary Edition (diperkenalkan dalam 10.0.14393.0)
API contract
Windows.Foundation.UniversalApiContract (diperkenalkan dalam v3.0)

Contoh

Dalam contoh ini, kami menambahkan alat kustom ke menu Surface Dial dan mendeklarasikan handler input RadialController.

  1. Pertama, kita membuat referensi ke objek RadialController untuk Surface Dial (myController) dengan memanggil CreateForCurrentView.
  2. Kami kemudian membuat instans RadialControllerMenuItem (myItem) dengan memanggil RadialControllerMenuItem.CreateFromIcon.
  3. Selanjutnya, kami menambahkan item tersebut ke koleksi item menu.
  4. Kami mendeklarasikan penanganan aktivitas input (ButtonClicked dan RotationChanged) untuk objek RadialController.
  5. Terakhir, kami mendefinisikan penanganan aktivitas.
public sealed partial class MainPage : Page
 {
     RadialController myController;

     public MainPage()
     {
         this.InitializeComponent();
         // Create a reference to the RadialController.
         myController = RadialController.CreateForCurrentView();

         // Create an icon for the custom tool.
         RandomAccessStreamReference icon =
           RandomAccessStreamReference.CreateFromUri(
             new Uri("ms-appx:///Assets/StoreLogo.png"));

         // Create a menu item for the custom tool.
         RadialControllerMenuItem myItem =
           RadialControllerMenuItem.CreateFromIcon("Sample", icon);

         // Add the custom tool to the RadialController menu.
         myController.Menu.Items.Add(myItem);

         // Declare input handlers for the RadialController.
         myController.ButtonClicked += MyController_ButtonClicked;
         myController.RotationChanged += MyController_RotationChanged;
     }

     // Handler for rotation input from the RadialController.
     private void MyController_RotationChanged(RadialController sender,
       RadialControllerRotationChangedEventArgs args)
     {
         if (RotationSlider.Value + args.RotationDeltaInDegrees > 100)
         {
             RotationSlider.Value = 100;
             return;
         }
         else if (RotationSlider.Value + args.RotationDeltaInDegrees < 0)
         {
             RotationSlider.Value = 0;
             return;
         }
         RotationSlider.Value += args.RotationDeltaInDegrees;
     }

     // Handler for click input from the RadialController.
     private void MyController_ButtonClicked(RadialController sender,
       RadialControllerButtonClickedEventArgs args)
     {
         ButtonToggle.IsOn = !ButtonToggle.IsOn;
     }
 }

Dalam fungsi inisialisasi yang ditunjukkan di sini, kami mendeklarasikan berbagai penanganan aktivitas input untuk objek RadialController.

// Create and configure our radial controller.
private void InitializeController() 
{
    // Create a reference to the RadialController.
    radialController = RadialController.CreateForCurrentView();
    // Set rotation resolution to 1 degree of sensitivity.
    radialController.RotationResolutionInDegrees = 1;

    // Declare input handlers for the RadialController.
    radialController.ButtonClicked += (sender, args) =>
    { RadialController_ButtonClicked(sender, args); };
    radialController.RotationChanged += (sender, args) =>
    { RadialController_RotationChanged(sender, args); };

    radialController.ControlAcquired += (sender, args) =>
    { RadialController_ControlAcquired(sender, args); };
    radialController.ControlLost += (sender, args) =>
    { RadialController_ControlLost(sender, args); };
    radialController.ScreenContactStarted += (sender, args) =>
    { RadialController_ScreenContactStarted(sender, args); };
    radialController.ScreenContactContinued += (sender, args) =>
    { RadialController_ScreenContactContinued(sender, args); };
    radialController.ScreenContactEnded += (sender, args) =>
    { RadialController_ScreenContactEnded(sender, args); };
    AddToLog("Input handlers created");

    // Create the custom menu items.
    CreateMenuItems();
    // Specify the menu items.
    ConfigureMenu();
}

Di handler ButtonClicked , interaksi mengatur status tombol pengalih untuk dicentang atau tidak dicentang.

// Occurs when the wheel device is pressed and then released 
// while a customRadialController tool is active.
// NOTE: Your app does not receive this event when the RadialController 
// menu is active or a built-in tool is active
// Send click input to toggle button of active region.
private void RadialController_ButtonClicked(RadialController sender,
  RadialControllerButtonClickedEventArgs args)
{
    toggles[activeMenuItemIndex].IsOn = !toggles[activeMenuItemIndex].IsOn;
}

Di handler RotationChanged , interaksi memodifikasi nilai slider.

// Occurs when the wheel device is rotated while a custom 
// RadialController tool is active.
// NOTE: Your app does not receive this event when the RadialController 
// menu is active or a built-in tool is active
// Send rotation input to slider of active region.
private void RadialController_RotationChanged(RadialController sender,
  RadialControllerRotationChangedEventArgs args)
{
    Slider slider = sliders[activeMenuItemIndex];
    if (slider.Value + args.RotationDeltaInDegrees > 100)
    {
        slider.Value = 100;
        return;
    }
    else if (slider.Value + args.RotationDeltaInDegrees < 0)
    {
        slider.Value = 0;
        return;
    }
    slider.Value += args.RotationDeltaInDegrees;
    AddToLog("\nRotation: " + sliders[activeMenuItemIndex].Name + " value changed to " + slider.Value);
}

Keterangan

Riwayat versi

Versi Windows Versi SDK Nilai ditambahkan
1703 15063 ButtonHolding
1703 15063 Tombol Ditekan
1703 15063 ButtonReleased

Properti

Menu

Mendapatkan referensi ke menu yang terkait dengan objek RadialController .

RotationResolutionInDegrees

Mendapatkan atau menetapkan nilai rotasi minimum yang diperlukan agar objek RadialController mengaktifkan peristiwa RotationChanged .

UseAutomaticHapticFeedback

Mendapatkan atau mengatur apakah umpan balik haptik diaktifkan pada perangkat roda untuk setiap peristiwa RotationChanged yang diaktifkan oleh RadialController.

Metode

CreateForCurrentView()

Membuat instans objek RadialController untuk perangkat roda dan mengikatnya ke aplikasi aktif.

IsSupported()

Mengambil nilai yang menunjukkan apakah perangkat roda didukung oleh sistem.

Acara

ButtonClicked

Terjadi ketika perangkat roda ditekan dan kemudian dilepaskan saat alat RadialController kustom aktif.

Aplikasi Anda tidak menerima peristiwa ini saat:

Catatan

Saat ambang waktu disilangkan, klik menjadi tindakan tekan dan tahan. Dalam hal ini, menu terintegrasi dari perintah aplikasi kontekstual yang terkait dengan objek RadialController ditampilkan, dan peristiwa putar dan klik berikutnya diproses oleh menu.

ButtonHolding

Terjadi ketika pengguna menekan dan menahan perangkat roda.

ButtonPressed

Terjadi ketika perangkat roda ditekan.

ButtonReleased

Terjadi ketika perangkat roda ditekan lalu dilepaskan.

ControlAcquired

Terjadi ketika alat RadialController kustom (ditentukan oleh aplikasi) dipilih dari menu, atau ketika aplikasi yang terkait dengan objek RadialController dibawa ke latar depan saat alat RadialController kustom aktif.

ControlLost

Terjadi saat alat RadialController kustom (ditentukan oleh aplikasi) aktif, dan aplikasi yang terkait dengan objek RadialController dikirim ke latar belakang, atau pengguna mengaktifkan menu RadialController .

RotationChanged

Terjadi ketika perangkat roda diputar saat alat RadialController kustom aktif.

Aplikasi Anda tidak menerima peristiwa ini saat:

ScreenContactContinued

Hanya terjadi ketika perangkat roda dipindahkan saat bersentuhan dengan permukaan digitizer, dan alat RadialController kustom aktif.

Aplikasi Anda tidak menerima peristiwa ini saat:

Tip

Selain pengalaman menu tekan dan tahan default, Surface Dial juga dapat ditempatkan langsung di layar Surface Studio. Ini memungkinkan menu "di layar" khusus.

Dengan mendeteksi lokasi kontak dan batas Surface Dial, sistem dapat menangani oklusi oleh perangkat dan menampilkan versi menu yang lebih besar yang membungkus di sekitar bagian luar Dial. Info yang sama ini juga dapat digunakan oleh aplikasi Anda untuk mengadaptasi UI untuk keberadaan perangkat dan penggunaan yang diantisipasi, seperti penempatan tangan dan lengan pengguna.

Peristiwa ini terjadi setelah ScreenContactStarted dan berhenti di ScreenContactEnded.

ScreenContactEnded

Terjadi ketika perangkat roda yang bersentuhan dengan permukaan digitizer dihapus (atau tidak lagi terdeteksi), dan alat RadialController kustom aktif.

Aplikasi Anda tidak menerima peristiwa ini saat:

Tip

Selain pengalaman menu tekan dan tahan default, Surface Dial juga dapat ditempatkan langsung di layar Surface Studio. Ini memungkinkan menu "di layar" khusus.

Dengan mendeteksi lokasi kontak dan batas Surface Dial, sistem dapat menangani oklusi oleh perangkat dan menampilkan versi menu yang lebih besar yang membungkus di sekitar bagian luar Dial. Info yang sama ini juga dapat digunakan oleh aplikasi Anda untuk mengadaptasi UI untuk keberadaan perangkat dan penggunaan yang diantisipasi, seperti penempatan tangan dan lengan pengguna.

Kejadian ini terjadi setelah ScreenContactStarted.

ScreenContactStarted

Terjadi ketika kontak awal terdeteksi antara perangkat roda dan permukaan digitizer, dan alat RadialController kustom aktif.

Aplikasi Anda tidak menerima peristiwa ini saat:

Tip

Selain pengalaman menu tekan dan tahan default, Surface Dial juga dapat ditempatkan langsung di layar Surface Studio. Ini memungkinkan menu "di layar" khusus.

Dengan mendeteksi lokasi kontak dan batas Surface Dial, sistem dapat menangani oklusi oleh perangkat dan menampilkan versi menu yang lebih besar yang membungkus di sekitar bagian luar Dial. Info yang sama ini juga dapat digunakan oleh aplikasi Anda untuk mengadaptasi UI untuk keberadaan perangkat dan penggunaan yang diantisipasi, seperti penempatan tangan dan lengan pengguna.

Berlaku untuk

Lihat juga