Поделиться через


RadialController Класс

Определение

Представляет устройство ввода с колесиком или периферийное устройство, например Surface Dial.

Surface Dial с Surface Studio и ручкой.

Surface Dial служит вспомогательным многомодальным устройством ввода, дополняющим основное устройство, с помощью вращательных действий (или жестов). В большинстве случаев пользователь вращает устройство недоминантной рукой, выполняя задачу доминантной рукой (например, используя перо). Оно не предназначено для точного ввода, как сенсорный экран, перо или мышь.

Surface Dial также поддерживает действие нажатия и удерживания и щелчок. Нажатие и удерживание служит одной цели — отображение меню команд. Если меню активно, поворот и щелчок обрабатывается в меню. В противном случае данные ввода передаются в приложение для обработки.

RadialController и связанные API (см. конец раздела) позволяют настроить интегрированное меню команд и интерфейс взаимодействия, поддерживаемый вашим приложением.

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
Наследование
Object Platform::Object IInspectable RadialController
Атрибуты

Требования к Windows

Семейство устройств
Windows 10 Anniversary Edition (появилось в 10.0.14393.0)
API contract
Windows.Foundation.UniversalApiContract (появилось в v3.0)

Примеры

В этом примере мы добавим пользовательское средство в меню Surface Dial и объявим обработчики ввода RadialController.

  1. Сначала мы создадим ссылку на объект RadialController для Surface Dial (myController), вызвав CreateForCurrentView.
  2. Затем мы создадим экземпляр RadialControllerMenuItem (myItem), вызвав RadialControllerMenuItem.CreateFromIcon.
  3. Потом мы добавим этот элемент в коллекции элементов меню.
  4. Мы объявляем обработчики событий ввода (ButtonClicked и RotationChanged) для объекта RadialController.
  5. Наконец, мы определяем обработчики событий.
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;
     }
 }

В показанной здесь функции инициализации мы объявляем различные обработчики входных событий для объекта 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();
}

В обработчике ButtonClicked взаимодействие устанавливает для переключателя состояние "Флажок" или "Снято".

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

В обработчике RotationChanged взаимодействие изменяет значение ползунка.

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

Комментарии

Журнал версий

Версия Windows Версия пакета SDK Добавленная стоимость
1703 15063 ButtonHolding
1703 15063 Кнопка сжатой
1703 15063 ButtonReleased

Свойства

Menu

Возвращает ссылку на меню, связанное с объектом RadialController .

RotationResolutionInDegrees

Возвращает или задает минимальное значение поворота, необходимое для объекта RadialController для запуска события RotationChanged .

UseAutomaticHapticFeedback

Возвращает или задает значение, указывающее, включена ли тактильная обратная связь на устройстве колеса для каждого события RotationChanged , вызванного RadialController.

Методы

CreateForCurrentView()

Создает экземпляр объекта RadialController для устройства wheel и привязывает его к активному приложению.

IsSupported()

Извлекает значение, указывающее, поддерживаются ли системой устройства с колесами.

События

ButtonClicked

Происходит при нажатии и освобождении колесного устройства во время активности пользовательского средства RadialController .

Ваше приложение не получает это событие, если:

  • Меню RadialController активно
  • Встроенное средство активно

Примечание

При превышении порогового значения времени щелчок становится действием нажатия и удержания. В этом случае отображается интегрированное меню контекстных команд приложения, связанных с объектом RadialController , а последующие события поворота и щелчка обрабатываются меню.

ButtonHolding

Происходит, когда пользователь нажимает и удерживает устройство колесика.

ButtonPressed

Происходит при нажатии колесного устройства.

ButtonReleased

Происходит при нажатии и освобождении колесного устройства.

ControlAcquired

Происходит при выборе из меню пользовательского средства RadialController (определенного приложением) или при выводе приложения, связанного с объектом RadialController , на передний план во время активности пользовательского средства RadialController .

ControlLost

Происходит, когда пользовательский инструмент RadialController (определяется приложением) активен, и приложение, связанное с объектом RadialController , отправляется в фоновый режим или пользователь активирует меню RadialController .

RotationChanged

Происходит при повороте колесного устройства во время активности пользовательского средства RadialController .

Ваше приложение не получает это событие, если:

  • Меню RadialController активно
  • Встроенное средство активно
ScreenContactContinued

Происходит только при перемещении колесного устройства при контакте с поверхностью дигитайзера и активном пользовательском средстве RadialController .

Ваше приложение не получает это событие, если:

  • Меню RadialController активно
  • Встроенное средство активно

Совет

В дополнение к меню нажатия и удержания по умолчанию surface Dial можно разместить непосредственно на экране Surface Studio. Это позволяет реализовать специальное меню "на экране".

Обнаружив расположение контакта и границы Surface Dial, система может обрабатывать загораживание устройства и отображать более крупную версию меню, которая обтекает за пределами dial. Эти же сведения также могут использоваться приложением для адаптации пользовательского интерфейса, если устройство присутствует или предполагается, что оно будет использоваться, например из-за положения руки.

Это событие происходит после ScreenContactStarted и останавливается на ScreenContactEnded.

ScreenContactEnded

Происходит при удалении (или не обнаружении) колесного устройства, которое находится в контакте с поверхностью дигитайзера, а также при активном пользовательском средстве RadialController .

Ваше приложение не получает это событие, если:

  • Меню RadialController активно
  • Встроенное средство активно

Совет

В дополнение к меню нажатия и удержания по умолчанию surface Dial можно разместить непосредственно на экране Surface Studio. Это позволяет реализовать специальное меню "на экране".

Обнаружив расположение контакта и границы Surface Dial, система может обрабатывать загораживание устройства и отображать более крупную версию меню, которая обтекает за пределами dial. Эти же сведения также могут использоваться приложением для адаптации пользовательского интерфейса, если устройство присутствует или предполагается, что оно будет использоваться, например из-за положения руки.

Это событие происходит после ScreenContactStarted.

ScreenContactStarted

Происходит при обнаружении начального контакта между устройством колесика и поверхностью дигитайзера и активном пользовательском средстве RadialController .

Ваше приложение не получает это событие, если:

  • Меню RadialController активно
  • Встроенное средство активно

Совет

В дополнение к меню нажатия и удержания по умолчанию surface Dial можно разместить непосредственно на экране Surface Studio. Это позволяет реализовать специальное меню "на экране".

Обнаружив расположение контакта и границы Surface Dial, система может обрабатывать загораживание устройства и отображать более крупную версию меню, которая обтекает за пределами dial. Эти же сведения также могут использоваться приложением для адаптации пользовательского интерфейса, если устройство присутствует или предполагается, что оно будет использоваться, например из-за положения руки.

Применяется к

См. также раздел