RadialController Clase

Definición

Representa un dispositivo de entrada de rueda o accesorio como Surface Dial.

Surface Dial con Surface Studio y lápiz.

Con un factor de forma que se basa en una acción (o gesto) de giro, Surface Dial se ha diseñado como un dispositivo de entrada secundario multimodal que complementa la entrada de un dispositivo principal. En la mayoría de los casos, el dispositivo se manipula con la mano no dominante del usuario mientras realiza una tarea con la mano dominante (por ejemplo, una entrada manuscrita con un lápiz). No está diseñado como una entrada de puntero de precisión (por ejemplo, entrada táctil, lápiz o mouse).

Surface Dial también admite una acción de pulsar y sostener y una acción de hacer clic. Pulsar y sostener tiene una única función: mostrar un menú de comandos. Si el menú está activo, este procesa la entrada de girar y hacer clic. De lo contrario, la entrada se pasa a la aplicación para su procesamiento.

RadialController y las API relacionadas (consulte el final del tema) permiten personalizar el menú de comandos integrado y la experiencia de interacción compatible con la aplicación.

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
Herencia
Object Platform::Object IInspectable RadialController
Atributos

Requisitos de Windows

Familia de dispositivos
Windows 10 Anniversary Edition (se introdujo en la versión 10.0.14393.0)
API contract
Windows.Foundation.UniversalApiContract (se introdujo en la versión v3.0)

Ejemplos

En este ejemplo, agregamos una herramienta personalizada al menú surface Dial y declaramos los controladores de entrada RadialController.

  1. En primer lugar, creamos una referencia al objeto RadialController para Surface Dial (myController) llamando a CreateForCurrentView.
  2. A continuación, creamos una instancia de un RadialControllerMenuItem (myItem) llamando a RadialControllerMenuItem.CreateFromIcon.
  3. Después, anexamos ese elemento a la colección de elementos de menú.
  4. Declaramos los controladores de eventos de entrada (ButtonClicked y RotationChanged) para el objeto RadialController.
  5. Por último, definimos los controladores de eventos.
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;
     }
 }

En la función de inicialización que se muestra aquí, declaramos los distintos controladores de eventos de entrada para el objeto 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();
}

En el controlador ButtonClicked , la interacción establece el estado de un botón de alternancia en activado o desactivado.

// 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;
}

En el controlador RotationChanged , la interacción modifica el valor de un control deslizante.

// 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);
}

Comentarios

Historial de versiones

Versión de Windows Versión del SDK Valor agregado
1703 15063 ButtonHolding
1703 15063 ButtonPressed
1703 15063 ButtonReleased

Propiedades

Menu

Obtiene una referencia al menú asociado al objeto RadialController .

RotationResolutionInDegrees

Obtiene o establece el valor de rotación mínimo necesario para que el objeto RadialController active un evento RotationChanged .

UseAutomaticHapticFeedback

Obtiene o establece si los comentarios hápticos están habilitados en el dispositivo wheel para cada evento RotationChanged desencadenado por radialController.

Métodos

CreateForCurrentView()

Crea una instancia de un objeto RadialController para el dispositivo wheel y lo enlaza a la aplicación activa.

IsSupported()

Recupera un valor que indica si el sistema admite dispositivos de rueda.

Eventos

ButtonClicked

Se produce cuando se presiona el dispositivo de rueda y, a continuación, se libera mientras una herramienta RadialController personalizada está activa.

La aplicación no recibe este evento cuando:

Nota

Cuando se cruza un umbral de tiempo, haga clic en una acción de presionar y mantener presionada. En este caso, se muestra el menú integrado de comandos de aplicación contextual asociados al objeto RadialController y el menú procesa los eventos de rotación y clic posteriores.

ButtonHolding

Se produce cuando el usuario presiona y mantiene presionado el dispositivo de rueda.

ButtonPressed

Se produce cuando se presiona el dispositivo de rueda.

ButtonReleased

Se produce cuando se presiona y se suelta el dispositivo de rueda.

ControlAcquired

Se produce cuando se selecciona una herramienta RadialController personalizada (definida por una aplicación) en el menú, o cuando una aplicación asociada al objeto RadialController se lleva al primer plano mientras está activa una herramienta RadialController personalizada.

ControlLost

Se produce mientras una herramienta RadialController personalizada (definida por una aplicación) está activa y la aplicación asociada al objeto RadialController se envía al fondo o el usuario activa el menú RadialController .

RotationChanged

Se produce cuando el dispositivo wheel se gira mientras una herramienta RadialController personalizada está activa.

La aplicación no recibe este evento cuando:

ScreenContactContinued

Se produce solo cuando el dispositivo de rueda se mueve mientras está en contacto con la superficie del digitalizador y una herramienta RadialController personalizada está activa.

La aplicación no recibe este evento cuando:

Sugerencia

Además de la experiencia de menú de pulsación y suspensión predeterminada, Surface Dial también se puede colocar directamente en la pantalla de Surface Studio. Esto activa un menú especial "en pantalla".

Al detectar la ubicación de contacto y los límites de Surface Dial, el sistema puede controlar la oclusión por parte del dispositivo y mostrar una versión más grande del menú que se ajusta alrededor del exterior del dial. Esta misma información también puede usarla la aplicación para adaptar la interfaz de usuario tanto a la presencia del dispositivo y su uso anticipado, como a la ubicación de la mano y el brazo del usuario.

Este evento se produce después de ScreenContactStarted y se detiene en ScreenContactEnded.

ScreenContactEnded

Se produce cuando se quita un dispositivo de rueda que está en contacto con la superficie del digitalizador (o ya no se detecta) y una herramienta RadialController personalizada está activa.

La aplicación no recibe este evento cuando:

Sugerencia

Además de la experiencia de menú de pulsación y suspensión predeterminada, Surface Dial también se puede colocar directamente en la pantalla de Surface Studio. Esto activa un menú especial "en pantalla".

Al detectar la ubicación de contacto y los límites de Surface Dial, el sistema puede controlar la oclusión por parte del dispositivo y mostrar una versión más grande del menú que se ajusta alrededor del exterior del dial. Esta misma información también puede usarla la aplicación para adaptar la interfaz de usuario tanto a la presencia del dispositivo y su uso anticipado, como a la ubicación de la mano y el brazo del usuario.

Este evento se produce después de ScreenContactStarted.

ScreenContactStarted

Se produce cuando se detecta contacto inicial entre un dispositivo de rueda y la superficie del digitalizador, y una herramienta RadialController personalizada está activa.

La aplicación no recibe este evento cuando:

Sugerencia

Además de la experiencia de menú de pulsación y suspensión predeterminada, Surface Dial también se puede colocar directamente en la pantalla de Surface Studio. Esto activa un menú especial "en pantalla".

Al detectar la ubicación de contacto y los límites de Surface Dial, el sistema puede controlar la oclusión por parte del dispositivo y mostrar una versión más grande del menú que se ajusta alrededor del exterior del dial. Esta misma información también puede usarla la aplicación para adaptar la interfaz de usuario tanto a la presencia del dispositivo y su uso anticipado, como a la ubicación de la mano y el brazo del usuario.

Se aplica a

Consulte también