2016-01-14 2 views
4

я следующий UserControl заявление в XAML сделано кем-то другим:Что значит иметь элемент x: Name внутри корневого элемента xaml?

<core:UserControlBase x:Class="xxxx" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:core="clr-namespace:Agn.Word.AddIn.Core.Presentation;assembly=Agn.Word.AddIn.Core" 

      x:Name="aName"> 

Насколько я знаю х: атрибут Name используется, чтобы дать имя переменной декларантом в XAML, чтобы иметь возможность ссылаться на него из кода или из самого xaml.

Учитывая, что это корневой элемент, я не понимаю, зачем использовать это имя (в коде позади я буду использовать this, в xaml я могу использовать RelativeSource и т. Д.).

Любые подсказки?

+2

Иногда 'RelativeSource' не является надежным, и вы должны использовать имя элемента. – Sinatr

+0

Итак, вы имеете в виду, что единственной причиной такого объявления является указание на корневой элемент с использованием этого имени из самого xaml. Так что, если он не используется, я могу полностью удалить объявление? –

+0

Если он не используется в xaml/cs ** этого ** 'UserControl', тогда его можно удалить. * Кто-то еще * может забыть удалить «x: Name» (возможно, использовал его, но потом что-то меняет, возможно, переключился на «RelativeSource» или написал прикрепленное поведение вместо кода и т. Д.). – Sinatr

ответ

3

Вы бы использовать x:Name когда вы хотите прямую ссылку на объект:

Уникально идентифицирует элементы объекта для доступа к реализованным объекта с фоновым кодом или общего кода. После применения к резервной копии модели программирования , x: имя можно считать эквивалентным переменной , содержащей ссылку на объект, возвращаемую конструктором.

(...)

Указанные х: Имя становится именем поля, которое создается в исходного кода, когда XAML, обрабатывается, и что поле имеет ссылку на объект.

Это более эффективно, чем использование RelativeSource, а также создает переменную в коде.

В вашем примере, если вы предпочитаете использовать RelativeSource для навигации по иерархии, и вы также не потребляете его в коде, вы можете просто удалить его.

+2

Стоит упомянуть, что 'RelativeSource' использует отражение для получения объекта, а ссылка на объект с помощью' x: Name' намного быстрее, так как переменная находится в коде. –

Смежные вопросы