x: Ім'я та ім'я посилаються на різні простори імен.
x: name - це посилання на простір імен x, визначений за замовчуванням у верхній частині файлу Xaml.
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Просто кажучи Name, використовується за замовчуванням нижче область імен.
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
x: Ім'я говорить про те, використовуйте простір імен, який має псевдонім x . x - це за замовчуванням, і більшість людей залишає його, але ви можете змінити його на все, що завгодно
xmlns:foo="http://schemas.microsoft.com/winfx/2006/xaml"
тож ваша посилання буде foo: name
Визначте та використовуйте простори імен у WPF
Гаразд давайте поглянемо на це по-іншому. Скажіть, ви перетягуєте кнопку на свою сторінку Xaml. Ви можете посилатися на це 2 способи x: ім'я та ім'я . Усі xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" та
xmlns: x = "http://schemas.microsoft.com/winfx/2006/xaml" - це посилання на кілька просторів імен . Оскільки xaml містить простір імен Control (не 100% на це), а презентація містить FrameworkElement І клас клавіш має шаблон успадкування:
Button : ButtonBase
ButtonBase : ContentControl, ICommandSource
ContentControl : Control, IAddChild
Control : FrameworkElement
FrameworkElement : UIElement, IFrameworkInputElement,
IInputElement, ISupportInitialize, IHaveResources
Отже, як можна було б очікувати, що все, що успадковується від FrameworkElement, матиме доступ до всіх його публічних атрибутів. тож у випадку з кнопкою він отримує свій атрибут Name від FrameworkElement, на самому верху дерева ієрархії. Таким чином, ви можете сказати x: ім'я або ім'я, і вони обидва матимуть доступ до геттера / сетера з FrameworkElement.
Довідник MSDN
WPF визначає атрибут CLR, який споживається процесорами XAML для того, щоб зіставити кілька просторів імен CLR в єдиний простір імен XML. Атрибут XmlnsDefinitionAttribute розміщується на рівні складання у вихідному коді, який виробляє збірку. Вихідний код збірки WPF використовує цей атрибут для відображення різних загальних просторів імен, таких як System.Windows та System.Windows.Controls, на http://schemas.microsoft.com/winfx/2006/xaml/presentationpace .
Тож атрибути збірки будуть виглядати приблизно так:
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
весь час працює добре. Я просто повинен був змінити його,Name
інакше я не міг посилатись на контроль у своєму .xaml.cs-коді, тому я буду припускати, що це вже не так, що він працює весь час добре.