private void Instance_Pressed(UINavigationManager sender, UINavigationButtons button) { if (!IsEnabled) { return; } if (Windows.UI.ViewManagement.InputPane.GetForCurrentView().Visible) { return; } if (IsRequireFocus && !_NowFocusingElement) { return; } if (!button.HasFlag(Kind)) { return; } if (Hold && !_Holding) { return; } _Holding = false; foreach (var action in Actions.Cast <IAction>()) { action.Execute(this.AssociatedObject, null); } }
private async void Instance_Pressed(UINavigationManager sender, UINavigationButtons button) { await _UIDispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => { if (FocusManager.GetFocusedElement() != AssociatedObject) { return; } if (button.HasFlag(UINavigationButtons.Up)) { FocusManager.TryMoveFocus(FocusNavigationDirection.Up); } else if (button.HasFlag(UINavigationButtons.Down)) { FocusManager.TryMoveFocus(FocusNavigationDirection.Down); } else if (button.HasFlag(UINavigationButtons.Right)) { FocusManager.TryMoveFocus(FocusNavigationDirection.Right); } else if (button.HasFlag(UINavigationButtons.Left)) { FocusManager.TryMoveFocus(FocusNavigationDirection.Left); } }); }
private void Instance_Holding(UINavigationManager sender, UINavigationButtons button) { if (Hold && button.HasFlag(Kind)) { _Holding = true; } }
private async void Instance_Holding(UINavigationManager sender, UINavigationButtons button) { await _UIDispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => { if (Hold && button.HasFlag(Kind)) { _Holding = true; } }); }
private void _DispatcherTimer_Tick(object sender, object e) { // コントローラー入力をチェック foreach (var controller in UINavigationController.UINavigationControllers.Take(1)) { var currentInput = controller.GetCurrentReading(); // ボタンを離した瞬間を検出 var pressing = RequiredUINavigationButtonsHelper.ToUINavigationButtons(currentInput.RequiredButtons) | OptionalUINavigationButtonsHelper.ToUINavigationButtons(currentInput.OptionalButtons); // var trigger = pressing & (_PrevPressingButtons ^ pressing); var released = _PrevPressingButtons & (_PrevPressingButtons ^ pressing); if (released != UINavigationButtons.None) { Pressed?.Invoke(this, released); } // ホールド入力の検出 UINavigationButtons holdingButtons = UINavigationButtons.None; foreach (var target in __InputDetectTargets) { if (pressing.HasFlag(target)) { if (!_ProcessedHoldingButtons.HasFlag(target)) { var time = _ButtonHold[target] += __InputPollingInterval; if (time > __HoldDetectTime) { holdingButtons |= target; _ProcessedHoldingButtons |= target; } } } else { _ButtonHold[target] = TimeSpan.Zero; _ProcessedHoldingButtons = (((UINavigationButtons)0) ^ target) & _ProcessedHoldingButtons; } } if (holdingButtons != UINavigationButtons.None) { Holding?.Invoke(this, holdingButtons); } // トリガー検出用に前フレームの入力情報を保存 _PrevPressingButtons = pressing; } }
private void UINavigationManager_Pressed(UINavigationManager sender, UINavigationButtons buttons) { var splitView = GetTemplateChild("ContentSplitView") as SplitView; if (_IsFocusing && buttons == UINavigationButtons.Left) { LeftInputCount++; if (LeftInputCount > 1) { splitView.IsPaneOpen = true; } } else { LeftInputCount = 0; if (buttons == UINavigationButtons.Accept || buttons == UINavigationButtons.Right) { splitView.IsPaneOpen = false; } } }
private void Instance_Pressed(UINavigationManager sender, UINavigationButtons button) { if (FocusManager.GetFocusedElement() != AssociatedObject) { return; } if (button.HasFlag(UINavigationButtons.Up)) { FocusManager.TryMoveFocus(FocusNavigationDirection.Up); } else if (button.HasFlag(UINavigationButtons.Down)) { FocusManager.TryMoveFocus(FocusNavigationDirection.Down); } else if (button.HasFlag(UINavigationButtons.Right)) { FocusManager.TryMoveFocus(FocusNavigationDirection.Right); } else if (button.HasFlag(UINavigationButtons.Left)) { FocusManager.TryMoveFocus(FocusNavigationDirection.Left); } }
static public OptionalUINavigationButtons ToOptionalButtons(this UINavigationButtons kind) { var val = ((int)kind & 0x000FFF00) >> 8; return((OptionalUINavigationButtons)val); }
static public RequiredUINavigationButtons ToRequiredButtons(this UINavigationButtons kind) { var val = (int)kind & 0x000000FF; return((RequiredUINavigationButtons)val); }