В XAML, пользовательское пространство имен может быть импортирован с xmlns
директивой:Принудительно глобальное пространство имен в XAML
xmlns:custom="clr-namespace:GreatStuff"
В C#, что пространство имен может быть импортирован с
using GreatStuff;
Кроме того, оценка того, что пространство имен на основе глобального (корневого) пространства имен может быть приведено в исполнение следующим образом:
using global::GreatStuff;
Как можно провести оценку на основе глобального пространства имен в XAML?
фона:
я столкнулся (правда, немного неясным) ситуацию, что существует такое пространство имен global::GreatStuff
, который содержит класс управления WPF с именем ... GreatStuff
(т.е. полное, это global::GreatStuff.GreatStuff
в C#). В том же пространстве имен я хочу использовать этот элемент управления в окне WPF.
Интересно, что в этом созвездии, я не могу использовать атрибут Name
/x:Name
на любые элементы управления типа global::GreatStuff.GreatStuff
в моем файле XAML для окна:
Имя типа «GreatStuff» не существует в типе " GreatStuff.GreatStuff. (CS0426)
Обратите внимание, что тот же самый файл компилируется нормально, если я не указываю атрибут в Name
/x:Name
!
Теперь, почему компилятор должен предположить, что, установив атрибут Name
/x:Name
, я пытаюсь получить доступ к чему-то, что называется GreatStuff.GreatStuff.GreatStuff
?
Ответ можно найти, просмотрев файл .g.cs
, созданный в окне XAML-файла окна. В этом файле, то XAML фрагмент
<custom:GreatStuff x:Name="stuff"/>
компилируется следующим C# фрагмент кода:
internal GreatStuff.GreatStuff stuff;
То есть, используется полное имя, но без явного глобального пространства имен маркера.
Конечно, как поле в классе в пространстве имен global::GreatStuff
, все это заворачивается в
namespace GreatStuff {
И так, бедный C# компилятор не может помочь, но предположим, что stuff
должен быть типа global::GreatStuff.GreatStuff.GreatStuff
. Этого можно было бы избежать, если в
xmlns:custom="clr-namespace:GreatStuff"
я мог бы обеспечивать, что любое упоминание о том префикса пространства имен могут быть преобразованы в то время как соблюдение глобального пространства имен.
По причинам, внешним по отношению к этому вопросу, изменение пространства имен и/или имен классов здесь не является вариантом.