В WPF, чем отличаются атрибуты x: Name и Name?

Помните, что если у вас есть строка, которая была прочитана как строка из текстового файла с использованием функции fgets(), вам нужно использовать substr($string, -3, 1), чтобы вы получили фактический символ, а не часть CRLF (возврат каретки Line Feed).

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

533
задан Drew Noakes 3 June 2018 в 20:08
поделиться

6 ответов

Действительно существует только одно имя в XAML, x:Name. Платформа, такая как WPF, может дополнительно отобразить одно из своих свойств к XAML's x:Name при помощи RuntimeNamePropertyAttribute на классе, который определяет одно из свойств классов как отображающийся на x:Name атрибут XAML.

причина, это было сделано, состояла в том, чтобы допускать платформы, которые уже имеют понятие "Name" во времени выполнения, таком как WPF. В WPF, например, FrameworkElement представляет свойство Name.

В целом, класс не должен хранить название x:Name, чтобы быть применимым. Весь x:Name средство для XAML, генерируют поле для хранения значения в коде позади класса. То, что время выполнения делает с тем отображением, является зависимым платформы.

Так, почему там два способа сделать то же самое? Простой ответ - то, потому что существует два понятия, отображенные на одно свойство. WPF хочет название элемента, сохраненного во времени выполнения (который применим через, Связывают, среди прочего), и XAML должен знать, какие элементы Вы хотите быть доступными полями в коде позади класса. WPF связывает эти два путем маркировки свойства Name как псевдоним x:Name.

В будущем, XAML будет иметь больше использования для x:Name, такого как разрешение Вам установить свойства путем обращения к другим объектам по имени, но в 3,5 и предшествующий, это только используется для создания полей.

, Необходимо ли использовать один или другой, действительно вопрос о стиле, не технический. Я оставлю это другим для рекомендации.

См. также AutomationProperties. VS x:Name имени, AutomationProperties. Имя используется инструментами доступности и некоторыми инструментами тестирования.

460
ответ дан Robert Harvey 4 June 2018 в 06:08
поделиться

x:Name и Имя ссылаются на различные пространства имен.

x:name является ссылкой на x пространство имен, определенное по умолчанию наверху файла Xaml.

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Просто высказывание Имя использование значение по умолчанию ниже пространства имен.

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

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

xmlns:foo="http://schemas.microsoft.com/winfx/2006/xaml"

, таким образом, Ваша ссылка была бы , foo:name

Определяет, и Пространства имен Использования в <час> WPF

хорошо позволяет взгляду на это другой путь. Скажите, что Вы перетаскиваете кнопку на свою страницу Xaml. Можно сослаться на это 2 пути x:name и имя . Весь xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" и xmlns:x =, который "http://schemas.microsoft.com/winfx/2006/xaml" , является ссылками на несколько пространств имен. С тех пор xaml содержит Управление пространство имен (не 100% на том) и , представление содержит FrameworkElement И , класс Кнопки имеет шаблон наследования:

Button : ButtonBase
ButtonBase : ContentControl, ICommandSource
ContentControl : Control, IAddChild
Control : FrameworkElement
FrameworkElement : UIElement, IFrameworkInputElement, 
                    IInputElement, ISupportInitialize, IHaveResources

Поэтому, поскольку можно было бы ожидать что-либо, что наследовалось FrameworkElement, имел бы доступ ко всем его общедоступным атрибутам. таким образом в случае Кнопки это получает свой атрибут Имени от FrameworkElement, в самом верху дерева иерархии. Так можно сказать x:Name или Имя , и они будут оба получать доступ к методу get/методу set от FrameworkElement.

Ссылка MSDN

WPF определяет атрибут CLR, который используется процессорами XAML для отображения нескольких пространств имен CLR на единственное пространство имен XML. атрибут XmlnsDefinitionAttribute помещается в уровень ассемблера в исходном коде, который производит блок. Исходный код блока WPF использует этот атрибут для отображения различных общих пространств имен, таких как Система. Windows и Система. Windows. Средства управления, к http://schemas.microsoft.com/winfx/2006/xaml/presentation пространство имен.

, Таким образом, атрибуты сборки посмотрят что-то как:

PresentationFramework.dll - XmlnsDefinitionAttribute:

[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows")]

[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Data")]

[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Navigation")]

[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Shapes")]

[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Documents")]

[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Controls")]  
36
ответ дан Robert Harvey 4 June 2018 в 06:08
поделиться

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

Средства управления могут представить, называют себя как Свойство Зависимости, если они хотят к (потому что они должны использовать то Свойство Зависимости внутренне), или они могут выбрать не к.

[еще 115] детали в msdn здесь и здесь :

Некоторые приложения уровня платформы WPF могли бы быть в состоянии избежать любого использования атрибута x:Name, потому что свойство зависимости от Имени, столь же указанное в пространстве имен WPF для нескольких из важных базовых классов, таких как FrameworkElement/FrameworkContentElement, удовлетворяет эту ту же цель. Существует все еще некоторый общий XAML и сценарии платформы, где доступ кода к элементу без свойства Name необходим, прежде всего в определенной анимации и классах поддержки раскадровки. Например, Вы должны определить x:Name на временных шкалах и преобразовываете созданный в XAML, если Вы намереваетесь сослаться на них от кода.

, Если Имя доступно как свойство на классе, Имя и x:Name могут использоваться попеременно в качестве атрибутов, но ошибка закончится, если оба будут определены на том же элементе.

20
ответ дан Robert Harvey 4 June 2018 в 06:08
поделиться

Я всегда использую x:Name вариант. Я понятия не имею, влияет ли это на какую-либо производительность, я просто нахожу это легче по следующей причине. Если у Вас будут свои собственные usercontrols, которые находятся в другом блоке просто, то свойство "Name" будет не всегда достаточно. Это помогает просто засунуть также x:Name свойство.

4
ответ дан Simon 4 June 2018 в 06:08
поделиться

Это не объект WPF, а стандартный XML, один и BtBh правильно ответили, что это, x относится к пространству имен по умолчанию. В XML, когда Вы не снабжаете префиксом элемент/атрибут пространство имен, это предполагает желание пространства имен по умолчанию. Так ввод всего Name является не чем иным как стенографией для x:Name. Больше деталей о пространствах имен XML может быть найдено в текст ссылки

3
ответ дан Community 4 June 2018 в 06:08
поделиться

Это не одно и то же.

x: Name - это концепция xaml, используемая в основном для ссылки на элементы. Когда вы даете элементу атрибут xaml x: Name, "указанное x: Name становится именем поля, которое создается в базовом коде при обработке xaml, и это поле содержит ссылку на объект ". ( MSDN ) Итак, это поле, созданное дизайнером, которое по умолчанию имеет внутренний доступ.

Имя - это существующее строковое свойство FrameworkElement , указанное как любое другое свойство элемента wpf в форме атрибута xaml.

Как следствие, это также означает, что x: Name может использоваться для более широкого круга объектов. Это метод, позволяющий ссылаться на все в xaml по заданному имени.

85
ответ дан 22 November 2019 в 22:18
поделиться
Другие вопросы по тегам:

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