RadialController Klasse

Definition

Stellt ein Radeingabegerät oder Zubehör wie das Surface Dial dar.

Surface Dial mit Surface Studio und Stift.

Der Formfaktor des Surface Dial entspricht einer Dreh-Aktion (oder -Geste). Das Surface Dial soll als sekundäres, multimodales Eingabegerät genutzt werden, das Eingaben über ein primäres Gerät ergänzt. In den meisten Fällen wird das Gerät von einem Benutzer mit der nicht dominanten Hand bedient, während er mit seiner dominanten Hand eine Aufgabe ausführt (z. B. Freihandzeichnen mit einem Stift). Es wurde nicht für präzise Zeigereingaben konzipiert (wie Touch-, Stift- oder Mauseingaben).

Das Surface Dial unterstützt außerdem eine Drücken-und-Halten-Aktion und eine Klick-Aktion. „Drücken und Halten“ hat nur eine Funktion: die Anzeige eines Befehlsmenüs. Wenn das Menü aktiv ist, wird die Dreh- und Klickeingabe vom Menü verarbeitet. Andernfalls wird die Eingabe zur Verarbeitung an Ihre App übergeben.

Mit dem RadialController und den zugehörigen APIs (siehe Ende des Themas) können Sie sowohl das integrierte Befehlsmenü als auch die von Ihrer App unterstützte Interaktionserfahrung anpassen.

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
Vererbung
Object Platform::Object IInspectable RadialController
Attribute

Windows-Anforderungen

Gerätefamilie
Windows 10 Anniversary Edition (eingeführt in 10.0.14393.0)
API contract
Windows.Foundation.UniversalApiContract (eingeführt in v3.0)

Beispiele

In diesem Beispiel fügen wir dem Surface Dial-Menü ein benutzerdefiniertes Tool hinzu und deklarieren die RadialController-Eingabehandler.

  1. Zunächst erstellen wir einen Verweis auf das RadialController-Objekt für Surface Dial (myController) durch Aufrufen von CreateForCurrentView.
  2. Anschließend erstellen wir eine instance eines RadialControllerMenuItem (myItem) durch Aufrufen von RadialControllerMenuItem.CreateFromIcon.
  3. Als Nächstes fügen wir das Element an die Sammlung der Menüelemente an.
  4. Wir deklarieren die Eingabeereignishandler (ButtonClicked und RotationChanged) für das RadialController-Objekt.
  5. Zuletzt definieren wir die Ereignishandler.
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;
     }
 }

In der hier gezeigten Initialisierungsfunktion deklarieren wir die verschiedenen Eingabeereignishandler für das RadialController-Objekt.

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

Im ButtonClicked-Handler legt die Interaktion den Status einer Umschaltfläche auf aktiviert oder deaktiviert fest.

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

Im RotationChanged-Handler ändert die Interaktion den Wert eines Schiebereglers.

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

Hinweise

Versionsverlauf

Windows-Version SDK-Version Mehrwert
1703 15063 ButtonHolding
1703 15063 SchaltflächePressed
1703 15063 ButtonReleased

Eigenschaften

Menu

Ruft einen Verweis auf das Menü ab, das dem RadialController-Objekt zugeordnet ist.

RotationResolutionInDegrees

Ruft den Mindestdrehungswert ab, der für das RadialController-Objekt erforderlich ist, um ein RotationChanged-Ereignis auszulösen , oder legt diesen fest.

UseAutomaticHapticFeedback

Ruft ab oder legt fest, ob haptisches Feedback auf dem Radgerät für jedes rotationChanged-Ereignis aktiviert ist, das vom RadialController ausgelöst wird.

Methoden

CreateForCurrentView()

Instanziiert ein RadialController-Objekt für das Radgerät und bindet es an die aktive Anwendung.

IsSupported()

Ruft einen Wert ab, der angibt, ob Radgeräte vom System unterstützt werden.

Ereignisse

ButtonClicked

Tritt auf, wenn das Radgerät gedrückt und dann losgelassen wird, während ein benutzerdefiniertes RadialController-Tool aktiv ist.

Ihre App empfängt dieses Ereignis nicht in folgenden Fällen:

Hinweis

Wenn ein Zeitschwellenwert überschritten wird, wird das Klicken zu einer Gedrückthalten-Aktion. In diesem Fall wird das integrierte Menü der kontextbezogenen App-Befehle angezeigt, die dem RadialController-Objekt zugeordnet sind, und nachfolgende Dreh- und Klickereignisse werden vom Menü verarbeitet.

ButtonHolding

Tritt auf, wenn der Benutzer das Radgerät drückt und gedrückt hält.

ButtonPressed

Tritt auf, wenn das Radgerät gedrückt wird.

ButtonReleased

Tritt auf, wenn das Radgerät gedrückt und dann losgelassen wird.

ControlAcquired

Tritt auf, wenn ein benutzerdefiniertes RadialController-Tool (durch eine App definiert) aus dem Menü ausgewählt wird oder wenn eine App, die dem RadialController-Objekt zugeordnet ist, in den Vordergrund geholt wird, während ein benutzerdefiniertes RadialController-Tool aktiv ist.

ControlLost

Tritt auf, während ein benutzerdefiniertes RadialController-Tool (durch eine App definiert) aktiv ist und entweder die dem RadialController-Objekt zugeordnete App an den Hintergrund gesendet wird, oder der Benutzer das RadialController-Menü aktiviert.

RotationChanged

Tritt auf, wenn das Radgerät gedreht wird, während ein benutzerdefiniertes RadialController-Tool aktiv ist.

Ihre App empfängt dieses Ereignis nicht in folgenden Fällen:

ScreenContactContinued

Tritt nur auf, wenn das Radgerät bewegt wird, während es mit der Digitizeroberfläche in Kontakt steht und ein benutzerdefiniertes RadialController-Tool aktiv ist.

Ihre App empfängt dieses Ereignis nicht in folgenden Fällen:

Tipp

Zusätzlich zum standardmäßigen Drücken und Halten des Menüs kann das Surface Dial auch direkt auf dem Bildschirm des Surface Studio platziert werden. Dadurch wird ein spezielles Onscreen-Menü aktiviert.

Durch die Erkennung der Kontaktposition und der Grenzen des Surface Dial kann das System die Okklusion durch das Gerät verarbeiten und eine größere Version des Menüs anzeigen, das um die Außenseite des Dial umschließt. Auch die App kann diese Informationen nutzen, um die Benutzeroberfläche an das Vorhandensein des Geräts und dessen beabsichtigte Nutzung anzupassen, z. B. daran, wie der Benutzer seine Hand und seinen Arm platziert.

Dieses Ereignis tritt nach ScreenContactStarted auf und wird auf ScreenContactEnded beendet.

ScreenContactEnded

Tritt auf, wenn ein Radgerät, das mit der Digitalisiereroberfläche in Kontakt steht, entfernt (oder nicht mehr erkannt wird) und ein benutzerdefiniertes RadialController-Tool aktiv ist.

Ihre App empfängt dieses Ereignis nicht in folgenden Fällen:

Tipp

Zusätzlich zum standardmäßigen Drücken und Halten des Menüs kann das Surface Dial auch direkt auf dem Bildschirm des Surface Studio platziert werden. Dadurch wird ein spezielles Onscreen-Menü aktiviert.

Durch die Erkennung der Kontaktposition und der Grenzen des Surface Dial kann das System die Okklusion durch das Gerät verarbeiten und eine größere Version des Menüs anzeigen, das um die Außenseite des Dial umschließt. Auch die App kann diese Informationen nutzen, um die Benutzeroberfläche an das Vorhandensein des Geräts und dessen beabsichtigte Nutzung anzupassen, z. B. daran, wie der Benutzer seine Hand und seinen Arm platziert.

Dieses Ereignis tritt nach ScreenContactStarted auf.

ScreenContactStarted

Tritt auf, wenn ein anfänglicher Kontakt zwischen einem Radgerät und der Digitizeroberfläche erkannt wird und ein benutzerdefiniertes RadialController-Tool aktiv ist.

Ihre App empfängt dieses Ereignis nicht in folgenden Fällen:

Tipp

Zusätzlich zum standardmäßigen Drücken und Halten des Menüs kann das Surface Dial auch direkt auf dem Bildschirm des Surface Studio platziert werden. Dadurch wird ein spezielles Onscreen-Menü aktiviert.

Durch die Erkennung der Kontaktposition und der Grenzen des Surface Dial kann das System die Okklusion durch das Gerät verarbeiten und eine größere Version des Menüs anzeigen, das um die Außenseite des Dial umschließt. Auch die App kann diese Informationen nutzen, um die Benutzeroberfläche an das Vorhandensein des Geräts und dessen beabsichtigte Nutzung anzupassen, z. B. daran, wie der Benutzer seine Hand und seinen Arm platziert.

Gilt für:

Weitere Informationen