RadialController クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
Surface Dial などのホイール入力デバイスまたはアクセサリを表します。
回転動作 (またはジェスチャ) に基づくフォームファクタを持つ Surface Dial は、プライマリ デバイスからの入力を補完または変更する、セカンダリのマルチ モーダル入力デバイスとして設計されています。 このデバイスは多くの場合、ユーザーが利き手でタスクを実行している間に (たとえばペンでインク操作をするときなど)、利き手ではない手で操作されます。 高精度のポインター入力 (タッチ、ペン、マウスなど) 用に設計されていません。
Surface Dial は、長押しアクションとクリックアクションもサポートしています。 長押しの機能は 1 つで、コマンドのメニューを表示します。 メニューがアクティブになっている場合、回転とクリックの入力はメニューによって処理されます。 それ以外の場合、入力は、処理のためにアプリに渡されます。
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 入力ハンドラーを宣言します。
- まず、CreateForCurrentView を呼び出して、Surface Dial (
myController
) の RadialController オブジェクトへの参照を作成します。 - 次に、RadialControllerMenuItem.CreateFromIcon を呼び出して RadialControllerMenuItem (
myItem
) のインスタンスを作成します。 - 次に、その項目をメニュー項目のコレクションに追加します。
- RadialControllerオブジェクトの入力イベント ハンドラー (ButtonClicked と RotationChanged) を宣言します。
- 最後に、イベント ハンドラーを定義します。
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 | ButtonPressed |
1703 | 15063 | ButtonReleased |
プロパティ
Menu |
RadialController オブジェクトに関連付けられているメニューへの参照を取得します。 |
RotationResolutionInDegrees |
RotationChanged イベントを発生させるために RadialController オブジェクトに必要な最小回転値を取得または設定します。 |
UseAutomaticHapticFeedback |
RadialController によって発生した RotationChanged イベントごとに、ホイール デバイスでハプティクス フィードバックを有効にするかどうかを取得または設定します。 |
メソッド
CreateForCurrentView() |
ホイール デバイスの RadialController オブジェクトをインスタンス化し、アクティブなアプリケーションにバインドします。 |
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 の接触位置と境界の両方を検出することで、システムはデバイスによるオクルージョンを処理し、ダイヤルの外側を囲むより大きなバージョンのメニューを表示できます。 この同じ情報をアプリで使用して、デバイスの存在とその予想される使用状況 (ユーザーの手や腕の配置など) の両方に合わせて UI を調整することもできます。 このイベントは ScreenContactStarted の後に発生し、 ScreenContactEnded で停止します。 |
ScreenContactEnded |
デジタイザー サーフェスに接触しているホイール デバイスが削除され (または検出されなくなった)、カスタム RadialController ツールがアクティブな場合に発生します。 次の場合、アプリはこのイベントを受け取りません。
ヒント Surface Dial は、既定の長押しメニュー エクスペリエンスに加えて、Surface Studioの画面上に直接配置することもできます。 これにより、特殊な "オンスクリーン" メニューが実現されます。 Surface Dial の接触位置と境界の両方を検出することで、システムはデバイスによるオクルージョンを処理し、ダイヤルの外側を囲むより大きなバージョンのメニューを表示できます。 この同じ情報をアプリで使用して、デバイスの存在とその予想される使用状況 (ユーザーの手や腕の配置など) の両方に合わせて UI を調整することもできます。 このイベントは、 ScreenContactStarted の後に発生します。 |
ScreenContactStarted |
ホイール デバイスとデジタイザーサーフェスの間で初期接触が検出され、カスタム RadialController ツールがアクティブな場合に発生します。 次の場合、アプリはこのイベントを受け取りません。
ヒント Surface Dial は、既定の長押しメニュー エクスペリエンスに加えて、Surface Studioの画面上に直接配置することもできます。 これにより、特殊な "オンスクリーン" メニューが実現されます。 Surface Dial の接触位置と境界の両方を検出することで、システムはデバイスによるオクルージョンを処理し、ダイヤルの外側を囲むより大きなバージョンのメニューを表示できます。 この同じ情報をアプリで使用して、デバイスの存在とその予想される使用状況 (ユーザーの手や腕の配置など) の両方に合わせて UI を調整することもできます。 |
適用対象
こちらもご覧ください
- Windows.UI.Input
- RadialControllerButtonClickedEventArgs
- RadialControllerConfiguration
- RadialControllerControlAcquiredEventArgs
- RadialControllerMenu
- RadialControllerMenuItem
- RadialControllerRotationChangedEventArgs
- RadialControllerScreenContact
- RadialControllerScreenContactContinuedEventArgs
- RadialControllerScreenContactStartedEventArgs
- RadialControllerMenuKnownIcon
- RadialControllerSystemMenuItemKind
- Surface Dial の操作
- ユニバーサル Windows プラットフォームのサンプル (C# と C++)
- Windows デスクトップのサンプル
- 放射状コントローラーのサンプル