我有一个有两个辅助窗口的应用程序。我有按钮,让你在窗口之间切换,工作正常:
ApplicationViewSwitcher.SwitchAsync(_viewToSwitchToId);
当用户通过跳转列表启动我们的应用程序时(在右键单击任务栏中的应用程序图标的最近标题下),我希望能够选择要关注的辅助窗口。
我使用与上面相同的代码,但它不起作用(无论我提供的_viewToSwitchToId
是什么,都会自动选择相同的辅助窗口。
我猜测我的应用已经拥有焦点(来自我的按钮)和没有焦点(跳转列表)时调用SwitchAsync()
之间存在一些差异。
有什么想法吗?
修改
Git repository重新发布SwitchAsync()
问题。
答案 0 :(得分:1)
我希望能够选择关注哪个辅助窗口
我将SwitchAsync()
方法添加到OnLaunched
进行测试,当从跳转列表中启动应用程序时,应用程序视图将正确切换到指定的视图。例如:
protected override async void OnLaunched(LaunchActivatedEventArgs e)
{
...
CoreApplicationView newView = CoreApplication.CreateNewView();
int newViewId = 0;
await newView.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
Frame frame = new Frame();
Window.Current.Content = frame;
Window.Current.Activate();
newViewId = ApplicationView.GetForCurrentView().Id;
});
await ApplicationViewSwitcher.SwitchAsync(newViewId);
//bool viewShown = await ApplicationViewSwitcher.TryShowAsStandaloneAsync(newViewId);
}
如果您仍然遇到问题,请提供最小的转载项目,以便我们进行测试。
更新:
SwitchAsync(Int32, Int32)
方法可以很好地适用于您的方案。例如:
// Create 2 secondary views
CoreApplicationView newView = CoreApplication.CreateNewView();
int newViewId = 0;
await newView.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
Frame frame = new Frame();
frame.Navigate(typeof(page1));
Window.Current.Content = frame;
Window.Current.Activate();
ApplicationView appView = ApplicationView.GetForCurrentView();
newViewId = appView.Id;
appView.Title = newViewId.ToString();
_viewIds.Add(newViewId);
});
bool viewShown = await ApplicationViewSwitcher.TryShowAsStandaloneAsync(newViewId);
CoreApplicationView newView2 = CoreApplication.CreateNewView();
int newViewId2 = 0;
await newView2.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
Frame frame = new Frame();
frame.Navigate(typeof(page2));
Window.Current.Content = frame;
Window.Current.Activate();
ApplicationView appView = ApplicationView.GetForCurrentView();
newViewId2 = appView.Id;
appView.Title = newViewId2.ToString();
_viewIds.Add(newViewId2);
});
bool viewShown2 = await ApplicationViewSwitcher.TryShowAsStandaloneAsync(newViewId2);
// Switch to first secondary view, BUT focuses on last secondary view :/
Debug.WriteLine("Switching to secondary view with id: " + _viewIds[0]);
// bool viewShowntoone = await ApplicationViewSwitcher.TryShowAsStandaloneAsync(_viewIds[0]);
await ApplicationViewSwitcher.SwitchAsync(_viewIds[0], _viewIds[1]);