2016-10-24 5 views
0

У меня есть пользовательский элемент управления, который повторно используется на нескольких страницах, включая MainPage. Я хотел бы выполнить некоторую логику в пользовательском элементе управления , если событие происходит на текущей странице для экземпляра пользовательского элемента управления. Логика такая же, независимо от того, что представляет собой страница, поэтому я бы предпочел, чтобы пользовательский элемент управления не вызывал делегата с родительской страницы.UWP Получить тип страницы из User Control из кода

//Event method in the user control: 
    private void Dummy_Event(object sender, DummyEventArgs e) 
    { 
     // Handle global application events only if this page is active 
     if (((Frame)Window.Current.Content).CurrentSourcePageType == typeof(/* PAGE TYPE */)) 
     { 
      //DO STUFF 
     } 
    } 

В if заявлении я проверяю, если текущий тип страницы приложения равно странице, что этот экземпляр пользовательского элемента управления является дочерним.

Я мог бы делать повторяющиеся звонки this.Parent, но даже если я в конечном итоге доберусь до элемента Page, нет способа сообщить, на какой странице это, насколько я знаю.

У кого-нибудь есть идеи?

+1

Можете ли вы добавить свойство boolean в usercontrol и установить значение true в xaml родительских страниц, на которые вы хотите запустить эту дополнительную логику? –

+0

Sry, я не получил то, что вы просили. Вы уже получили тип страницы по типу CurrentSourcePageType. Тогда что еще вы хотите? –

+0

@ ElvisXia-MSFT «CurrentSourcePageType» - это текущая страница, но мне нужно сравнить ее со страницей, к которой принадлежит экземпляр пользовательского элемента управления, поскольку все страницы кэшированы, и я не хочу, чтобы код запускался, если конкретная страница не является активной. – ohgross

ответ

1

Вещи становятся немного грязными, если вы сами несете ответственность за то, чтобы определить, находится ли он внутри текущего PageFrame. Я буду следовать предложению Марка и выставить булевское свойство (возможно, IsActive), которое вы можете использовать, чтобы решить, следует ли вам обрабатывать это событие в пределах UserControl. Теперь каждый Page несет ответственность за установку этого флага внутри OnNavigatedTo и его очистку внутри OnNavigatedFrom.