2016-12-07 3 views
0

Вот некоторые из способов получить диспетчер представления.Получение диспетчера окна в UWP

Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher

и

Windows.ApplicationModel.Core.CoreApplication.GetCurrentView(). CoreWindow.Dispatcher

В то время как первый возвращает диспетчер основного вида, а последний возвращает диспетчер активного view, Как я могу получить диспетчер просмотра, который неактивен?

ответ

2

Необходимо иметь ссылку на представление, с которым вы хотите получить доступ к диспетчеру. Если вы создадите, вы как-то сохраните его, см. Ниже. В качестве альтернативы вы можете получить доступ ко всему виду, называя это:

IReadOnlyList<CoreApplicationView> views = CoreApplication.Views; 

Однако вид не имеет непосредственно доступный идентификатор, так что вам нужно получить идентификатор, вызвав следующее после того, как был активировано в диспетчере для него :

await newView.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,() => { 
    Frame frame = new Frame(); 
    frame.Navigate(typeof(SecondaryPage), null); 
    Window.Current.Content = frame; 
    // You have to activate the window in order to show it later. 
    Window.Current.Activate(); 

    newViewId = ApplicationView.GetForCurrentView().Id; 
}); 

Тогда я хотел бы предложить, чтобы создать свой собственный IDictionary<int, CoreApplicationView> иметь отображение между идентификаторами и ваших взглядов. В качестве альтернативы вы можете также получить идентификатор по

newViewId = ApplicationView.GetApplicationViewIdForWindow(newView.CoreWindow); 

(некоторые дополнительные documentation)

1

После некоторого недавнего опыта, я хотел бы предложить на хранении ссылок на диспетчер. Вместо этого полагайтесь на страницу/элемент управления, с которой вы хотите запустить код пользовательского интерфейса, поскольку каждый элемент управления XAML имеет свой собственный CoreDispatcher. Таким образом, вы уверены, что у вас есть правильный диспетчер, и если он отсутствует, это признак того, что что-то не так. Код из источника xaml:

namespace Windows.UI.Xaml 
{ 
//Summary: 
//Represents an object that participates in the dependency property system. DependencyObject is the immediate base class of many `enter code here` important UI-related classes, such as UIElement, Geometry, FrameworkTemplate, Style, and ResourceDictionary. 
public class DependencyObject : IDependencyObject, IDependencyObject2 
{ 

    //Summary: 
    //Gets the CoreDispatcher that this object is associated with. The CoreDispatcher represents a facility that can access the DependencyObject on the UI thread even if the code is initiated by a non-UI thread. 
    // Returns: The CoreDispatcher that DependencyObject object is associated with, which represents the UI thread. 
    public CoreDispatcher Dispatcher { get; } 

(...) 

} 
}