x: Nazwa i Nazwa odnoszą się do różnych przestrzeni nazw.
x: nazwa jest odniesieniem do przestrzeni nazw x zdefiniowanej domyślnie w górnej części pliku Xaml.
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Po prostu mówiąc Nazwa używa domyślnej przestrzeni nazw poniżej.
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
x: Nazwa mówi używać przestrzeni nazw, która ma alias x . x jest ustawieniem domyślnym i większość ludzi go opuszcza, ale możesz go zmienić na dowolny
xmlns:foo="http://schemas.microsoft.com/winfx/2006/xaml"
więc twoim referencją będzie foo: name
Zdefiniuj i używaj przestrzeni nazw w WPF
OK, spójrzmy na to z innej perspektywy. Załóżmy, że przeciągasz i upuszczasz przycisk na swojej stronie Xaml. Możesz odwołać się do tych 2 sposobów x: nazwa i nazwa . Wszystkie xmlns = „http://schemas.microsoft.com/winfx/2006/xaml/presentation” i
xmlns: x = „http://schemas.microsoft.com/winfx/2006/xaml” to odniesienia do wielu przestrzeni nazw . Ponieważ xaml posiada przestrzeń nazw Control (nie 100%), a prezentacja zawiera FrameworkElement ORAZ klasa Button ma wzorzec dziedziczenia:
Button : ButtonBase
ButtonBase : ContentControl, ICommandSource
ContentControl : Control, IAddChild
Control : FrameworkElement
FrameworkElement : UIElement, IFrameworkInputElement,
IInputElement, ISupportInitialize, IHaveResources
Jak można się spodziewać, wszystko, co odziedziczy po FrameworkElement, miałoby dostęp do wszystkich jego publicznych atrybutów. więc w przypadku przycisku pobiera on swój atrybut Name z FrameworkElement, na samym szczycie drzewa hierarchii. Możesz więc powiedzieć x: Nazwa lub Nazwa, a oni będą mieli dostęp do gettera / settera z FrameworkElement.
Dokumentacja MSDN
WPF definiuje atrybut CLR używany przez procesory XAML w celu mapowania wielu przestrzeni nazw CLR do pojedynczej przestrzeni nazw XML. XmlnsDefinitionAttribute atrybut jest umieszczony na poziomie montażowej w kodzie, który wytwarza się montaż. Kod źródłowy zestawu WPF używa tego atrybutu do mapowania różnych popularnych przestrzeni nazw, takich jak System.Windows i System.Windows.Controls, na http://schemas.microsoft.com/winfx/2006/xaml/presentation namespace.
Tak więc atrybuty zestawu będą wyglądać mniej więcej tak:
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
cały czas działa dobrze. Po prostu musiałem to zmienić,Name
inaczej nie mogłem odwoływać się do kontrolki w moim kodzie .xaml.cs, więc założę, że nie jest tak, że cały czas działa dobrze.