RadialController Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Представляет устройство ввода с колесиком или периферийное устройство, например Surface Dial.
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
- Наследование
- Атрибуты
Требования к Windows
Семейство устройств |
Windows 10 Anniversary Edition (появилось в 10.0.14393.0)
|
API contract |
Windows.Foundation.UniversalApiContract (появилось в v3.0)
|
Примеры
В этом примере мы добавим пользовательское средство в меню Surface Dial и объявим обработчики ввода RadialController.
- Сначала мы создадим ссылку на объект RadialController для Surface Dial (
myController
), вызвав CreateForCurrentView. - Затем мы создадим экземпляр RadialControllerMenuItem (
myItem
), вызвав RadialControllerMenuItem.CreateFromIcon. - Потом мы добавим этот элемент в коллекции элементов меню.
- Мы объявляем обработчики событий ввода (ButtonClicked и RotationChanged) для объекта RadialController.
- Наконец, мы определяем обработчики событий.
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 , а последующие события поворота и щелчка обрабатываются меню. |
ButtonHolding |
Происходит, когда пользователь нажимает и удерживает устройство колесика. |
ButtonPressed |
Происходит при нажатии колесного устройства. |
ButtonReleased |
Происходит при нажатии и освобождении колесного устройства. |
ControlAcquired |
Происходит при выборе из меню пользовательского средства RadialController (определенного приложением) или при выводе приложения, связанного с объектом RadialController , на передний план во время активности пользовательского средства RadialController . |
ControlLost |
Происходит, когда пользовательский инструмент RadialController (определяется приложением) активен, и приложение, связанное с объектом RadialController , отправляется в фоновый режим или пользователь активирует меню RadialController . |
RotationChanged |
Происходит при повороте колесного устройства во время активности пользовательского средства RadialController . Ваше приложение не получает это событие, если:
|
ScreenContactContinued |
Происходит только при перемещении колесного устройства при контакте с поверхностью дигитайзера и активном пользовательском средстве RadialController . Ваше приложение не получает это событие, если:
Совет В дополнение к меню нажатия и удержания по умолчанию surface Dial можно разместить непосредственно на экране Surface Studio. Это позволяет реализовать специальное меню "на экране". Обнаружив расположение контакта и границы Surface Dial, система может обрабатывать загораживание устройства и отображать более крупную версию меню, которая обтекает за пределами dial. Эти же сведения также могут использоваться приложением для адаптации пользовательского интерфейса, если устройство присутствует или предполагается, что оно будет использоваться, например из-за положения руки. Это событие происходит после ScreenContactStarted и останавливается на ScreenContactEnded. |
ScreenContactEnded |
Происходит при удалении (или не обнаружении) колесного устройства, которое находится в контакте с поверхностью дигитайзера, а также при активном пользовательском средстве RadialController . Ваше приложение не получает это событие, если:
Совет В дополнение к меню нажатия и удержания по умолчанию surface Dial можно разместить непосредственно на экране Surface Studio. Это позволяет реализовать специальное меню "на экране". Обнаружив расположение контакта и границы Surface Dial, система может обрабатывать загораживание устройства и отображать более крупную версию меню, которая обтекает за пределами dial. Эти же сведения также могут использоваться приложением для адаптации пользовательского интерфейса, если устройство присутствует или предполагается, что оно будет использоваться, например из-за положения руки. Это событие происходит после ScreenContactStarted. |
ScreenContactStarted |
Происходит при обнаружении начального контакта между устройством колесика и поверхностью дигитайзера и активном пользовательском средстве RadialController . Ваше приложение не получает это событие, если:
Совет В дополнение к меню нажатия и удержания по умолчанию surface Dial можно разместить непосредственно на экране Surface Studio. Это позволяет реализовать специальное меню "на экране". Обнаружив расположение контакта и границы Surface Dial, система может обрабатывать загораживание устройства и отображать более крупную версию меню, которая обтекает за пределами dial. Эти же сведения также могут использоваться приложением для адаптации пользовательского интерфейса, если устройство присутствует или предполагается, что оно будет использоваться, например из-за положения руки. |
Применяется к
См. также раздел
- Windows.UI.Input
- RadialControllerButtonClickedEventArgs
- RadialControllerConfiguration
- RadialControllerControlAcquiredEventArgs
- RadialControllerMenu
- RadialControllerMenuItem
- RadialControllerRotationChangedEventArgs
- RadialControllerScreenContact
- RadialControllerScreenContactContinuedEventArgs
- RadialControllerScreenContactStartedEventArgs
- RadialControllerMenuKnownIcon
- RadialControllerSystemMenuItemKind
- Взаимодействие с Surface Dial
- Примеры для универсальной платформы Windows (C# и C++)
- Пример рабочего стола Windows
- Пример радиального контроллера