2017-07-05 50 views
1

我有了两个次级窗口的应用程序。我有一个让你在窗口之间进行切换按钮,工作正常:如何专注于辅助窗口?

ApplicationViewSwitcher.SwitchAsync(_viewToSwitchToId);

当用户通过跳转列表,启动我们的应用程序(最近的标题下,当你正确的应用程序图标在任务栏上点击)我希望能够选择关注哪个辅助窗口。

我使用相同的代码如上述,但它不工作(自动选择的无论什么_viewToSwitchToId我提供相同的次级窗口)。

我猜从调用SwitchAsync()到应用程序已经有焦点(从我的按钮)到它没有焦点时(跳转列表)有一些区别。

任何想法?


编辑

Git repositorySwitchAsync()问题的摄制。

回答

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]); 
+0

感谢您的快速响应Sunteen!你有两个二级窗口测试吗?只要只有一个辅助窗口,它就可以正常工作,但只要有更多'SwitchAsync(viewId)'忽略'viewId'参数。我已经添加了一个[git repo](https://github.com/fman028/FocusOnSecondaryWindowIssue)来突出显示这个问题。 – Felix

+0

你有机会尝试git回购吗? – Felix

+1

@Felix。我测试过了。在你的场景中,你可能需要通过'SwitchAsync(Int32,Int32)'方法从另一个视图指定另一个视图。有关代码详情,请参阅更新的回复。 –