2013-12-03 3 views
1

Можно ли объявить пространство имен, как:Можно ли объявить пространство имен в коде позади

<Window xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     x:Class="MyApp.MainWindow"/> 

В коде позади, например, в конструкторе.

public MainWindow() 
{ 
    // ... here 
} 

Назначение: less многословие; объявлять пространства имен в одном месте и использовать наследование.

EDIT: Я пытался добавить

[assembly: XmlnsDefinition("http://mycompany/myapp", "clr-namespace:MyApp.Controls")] 
[assembly: XmlnsPrefix("http://mycompany/myapp", "myc")] 

AssemblyInfo.cs к но сборка завершается с ошибкой «префикс пространства имен„Мус“не определен».

Поэтому я использую attirbutes в том же проекте, что и файл xaml.

+2

'' Меньше многословие, но приходится идти в другой файл, чтобы узнать от того, что пространство имен объекта происходит от будет раздражать! '' – Vache

+0

@Vache: Я бы сказал, это зависит от использования. Если у вас есть сборка, полная общих компонентов Xaml в разных (сборных) пространствах имен, удобно ссылаться на эту целую сборку с одним (xml) пространством имен. Аналогично, вы можете ссылаться на несколько сборок через одно пространство имен xml, если ваш проект является сложным. –

ответ

1

Нет, Пространство имен являются частью XML standard и не имеют ничего общего с XAML/.Net

Если пространство имена были объявлены в коде позади, то ваш XAML не будет действительным документом XML.

+2

Неправда. См. Мой ответ через минуту ... :) –

+0

Ха! Я фактически использовал этот атрибут и забыл об этом. Хороший звонок +1. – GazTheDestroyer

+0

Возможно, не совсем верно, но XML нуждается в объявлении ns и prefix, и моя цель состояла в том, чтобы избавиться от этого в центральном месте, что невозможно. – Gerard

6

Там в an attribute you can use в коде ссылочной сборки, отображающая Ури в коде пространство имен:

[XmlnsDefinitionAttribute("http://yournamespace/", "Your.Assembly.Namespace")] 

Вы можете включать в себя несколько таких атрибутах, как правило, в вашем AssemblyInfo.cs, что позволяет несколько пространств имен кода будет ссылаться одно пространство имен Uri в Xaml.

Например, если указать декомпилятор на PresentationCore сборки, вы можете увидеть такие атрибуты, как это на уровне сборки:

[assembly: XmlnsDefinition("http://schemas.microsoft.com/netfx/2007/xaml/presentation", "System.Windows.Ink")] 

Это как импорт Uri получает отображается в кодовых имен.

(Полное раскрытие: Я принял этот ответ от раннего ответа я сделал here на подобный вопрос.)

+0

Мне нужен атрибут 'XmlnsPrefix'. См. Мое редактирование: оно, похоже, не работает из коробки. – Gerard

+0

Я не уверен, что вы сделали, но, добавив атрибут 'XmlnsDefinition', вам все равно нужно объявить' xmlns: foo = http: // mycompany/myapp' в корневом элементе вашего xaml. Вы включили это? Для этого вам не нужно 'XmlnsPrefix'. –

+0

Да, с объявлением префикса это работает, но моя идея состояла в том, чтобы также объявить префикс, и это, похоже, не работает таким образом. – Gerard

Смежные вопросы