Помните, что если у вас есть строка, которая была прочитана как строка из текстового файла с использованием функции fgets()
, вам нужно использовать substr($string, -3, 1)
, чтобы вы получили фактический символ, а не часть CRLF (возврат каретки Line Feed).
Я не думаю, что тот, кто задал этот вопрос, нуждался в этом, но для меня у меня возникли проблемы с получением последнего символа из строки из текстового файла, поэтому я уверен, что другие будут сталкиваться с аналогичными проблемами.
Действительно существует только одно имя в 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. Имя используется инструментами доступности и некоторыми инструментами тестирования.
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.
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")]
Они - оба то же самое, много элементов платформы представляет свойство имени самих, но для тех, которые не делают можно использовать x:name - я обычно просто придерживаюсь x:name, потому что это работает на все.
Средства управления могут представить, называют себя как Свойство Зависимости, если они хотят к (потому что они должны использовать то Свойство Зависимости внутренне), или они могут выбрать не к.
[еще 115] детали в msdn здесь и здесь :
Некоторые приложения уровня платформы WPF могли бы быть в состоянии избежать любого использования атрибута x:Name, потому что свойство зависимости от Имени, столь же указанное в пространстве имен WPF для нескольких из важных базовых классов, таких как FrameworkElement/FrameworkContentElement, удовлетворяет эту ту же цель. Существует все еще некоторый общий XAML и сценарии платформы, где доступ кода к элементу без свойства Name необходим, прежде всего в определенной анимации и классах поддержки раскадровки. Например, Вы должны определить x:Name на временных шкалах и преобразовываете созданный в XAML, если Вы намереваетесь сослаться на них от кода.
, Если Имя доступно как свойство на классе, Имя и x:Name могут использоваться попеременно в качестве атрибутов, но ошибка закончится, если оба будут определены на том же элементе.
Я всегда использую x:Name вариант. Я понятия не имею, влияет ли это на какую-либо производительность, я просто нахожу это легче по следующей причине. Если у Вас будут свои собственные usercontrols, которые находятся в другом блоке просто, то свойство "Name" будет не всегда достаточно. Это помогает просто засунуть также x:Name свойство.
Это не объект WPF, а стандартный XML, один и BtBh правильно ответили, что это, x относится к пространству имен по умолчанию. В XML, когда Вы не снабжаете префиксом элемент/атрибут пространство имен, это предполагает желание пространства имен по умолчанию. Так ввод всего Name
является не чем иным как стенографией для x:Name
. Больше деталей о пространствах имен XML может быть найдено в текст ссылки
Это не одно и то же.
x: Name
- это концепция xaml, используемая в основном для ссылки на элементы. Когда вы даете элементу атрибут xaml x: Name, "указанное x: Name
становится именем поля, которое создается в базовом коде при обработке xaml, и это поле содержит ссылку на объект ". ( MSDN ) Итак, это поле, созданное дизайнером, которое по умолчанию имеет внутренний доступ.
Имя
- это существующее строковое свойство FrameworkElement
, указанное как любое другое свойство элемента wpf в форме атрибута xaml.
Как следствие, это также означает, что x: Name
может использоваться для более широкого круга объектов. Это метод, позволяющий ссылаться на все в xaml по заданному имени.