RadialController Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Stellt ein Radeingabegerät oder Zubehör wie das Surface Dial dar.
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
- 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.
- Zunächst erstellen wir einen Verweis auf das RadialController-Objekt für Surface Dial (
myController
) durch Aufrufen von CreateForCurrentView. - Anschließend erstellen wir eine instance eines RadialControllerMenuItem (
myItem
) durch Aufrufen von RadialControllerMenuItem.CreateFromIcon. - Als Nächstes fügen wir das Element an die Sammlung der Menüelemente an.
- Wir deklarieren die Eingabeereignishandler (ButtonClicked und RotationChanged) für das RadialController-Objekt.
- 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
- Windows.UI.Input
- RadialControllerButtonClickedEventArgs
- RadialControllerConfiguration
- RadialControllerControlAcquiredEventArgs
- RadialControllerMenu
- RadialControllerMenuItem
- RadialControllerRotationChangedEventArgs
- RadialControllerScreenContact
- RadialControllerScreenContactContinuedEventArgs
- RadialControllerScreenContactStartedEventArgs
- RadialControllerMenuKnownIcon
- RadialControllerSystemMenuItemKind
- Surface Dial-Interaktionen
- Universelle Windows-Plattform – Beispiele (C# und C++)
- Windows-Desktopbeispiel
- Beispiel für radiale Controller