Почему не делает Окна. FindName () обнаруживают x:Name кнопки в дочернем UserControl? Иначе, как NameScopes работают?

Если Вы желаете делегату в других функциях, можно также расширить jQuery с помощью $ .fn. нотация как так:


var this.studentId = null;

$.getJSON(url, data, 
    function(result){
      $.fn.delegateJSONResult(result.Something);
    }
);

$.fn.delegateJSONResult = function(something){
  this.studentId = something;
}


5
задан Community 23 May 2017 в 12:09
поделиться

1 ответ

Вы правы - это связано с областями имен XAML.

Это (несколько плохо) задокументировано в разделе API, связанных с именами, в XAML Страница Namescopes .

В основном, если у вас есть FrameworkElement или FrameworkContentElement, он определит свою собственную область имен. Если вы вызываете FindName () для типа, который не имеет области имен, WPF ищет вверх thet ree, пока не найдет элемент, который действительно определяет область имен, а затем выполняет поиск в этой области имен.

В вашем В этом случае он выполняет поиск в области имен Window (это FrameworkContentElement, поэтому он определяет свою собственную область). Он просто ищет элементы, определенные в этой области.

В вашем случае кнопка находится в области имен UserControl, поэтому Window.FindName () не находит ее. Нет автоматического поиска вниз дерева в области нижнего уровня.

Это хорошо - ваше «Окно» не должно знать или хотеть ничего знать о внутренних деталях используемого им UserControl. Если вам нужны свойства в UserControl, они должны быть доступны на уровне UserControl - пусть элемент управления управляет своими дочерними элементами.

5
ответ дан 14 December 2019 в 19:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: