protected async override void RemoteWindowOperationsBus_EventBroadcasted(BusEvent e) { var remoteOp = e.DataAs <RemoteWindowOperationEvent>(); var vm = remoteOp.ViewModel; var wnd = _vmWindowMapping[(ContentItemViewModel)vm]; var op = WindowOperation.Unlock; switch (remoteOp.RemoteEvent.Type) { case RemoteEventType.MenuClosed: case RemoteEventType.MoveMenuTo: case RemoteEventType.MenuItemSelected: op = WindowOperation.Unknown; break; case RemoteEventType.WindowClosed: op = WindowOperation.Close; break; case RemoteEventType.WindowLocked: op = WindowOperation.Lock; break; case RemoteEventType.WindowRestored: op = WindowOperation.Restore; break; case RemoteEventType.WindowUnlocked: op = WindowOperation.Unlock; break; default: break; } var opdata = new WindowOperationEventData() { BusEvent = e, DataObject = vm, WindowObject = wnd, Operation = op }; var dsp = Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher; if (!dsp.HasThreadAccess) { await dsp.RunAsync(CoreDispatcherPriority.Normal, () => _wndOpHandlers[op](opdata)); return; } }
private void WndOpHandler_Close(WindowOperationEventData data) { if (data.DataObject is ContentItemViewModel cvi && cvi.Type != ContentItemType.MenuItem) { _workspace.WindowDataSource.Remove(cvi); _vmWindowMapping.Remove(cvi); if (cvi.PublishRemoteEvents) { _remoteBus.Publish(new RemoteEvent(RemoteEventType.WindowClosed, cvi.Model), this); } } }
private void WndOpHandler_Opened(WindowOperationEventData obj) { var vm = obj.DataObject as ContentItemViewModel; if (obj.WindowObject is Window wnd) { wnd.SetPosition(0, 0); // HACK : this should be temporary since i don't know if it's ok to have multiple windows open under the same VM if (!_vmWindowMapping.ContainsKey(vm)) { _vmWindowMapping.Add(vm, wnd); } wnd.PrepareFullscreen(); BringItemToFront(vm); } }
private void WndOpHandler_Opened(WindowOperationEventData obj) { var vm = obj.DataObject as ContentItemViewModel; if (obj.WindowObject is Window wnd) { wnd.ManipulationMode = ManipulationModes.All; wnd.Tapped += Wnd_Tapped; wnd.ManipulationStarted += Wnd_ManipulationStarted; wnd.ManipulationDelta += Wnd_ManipulationDelta; wnd.ManipulationCompleted += Wnd_ManipulationCompleted; var(x, y) = _cascadeManager.GetSpawnCoordinates(); wnd.SetPosition(x, y); // HACK : this should be temporary since i don't know if it's ok to have multiple windows open under the same VM if (!_vmWindowMapping.ContainsKey(vm)) { _vmWindowMapping.Add(vm, wnd); } BringItemToFront(vm); } }