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