Я разрабатываю приложение C# Windows Phone 8.1 в VC2013 и наткнулся на нечетную проблему.Конвертер XAML в другом пространстве имен
Чтобы сделать мой код более «чистым», я решил поместить различные части своего приложения в разные папки. Нет проблем с вызовом страниц XAML из этих папок в коде C#.
BUT У меня, кажется, проблемы, связанные этими папками в коде XAML. Например, у меня есть следующие структуры:
root, Files: App.cs+xaml, Mainpage.cs+xaml
|
-- Folder: Login
|
-- Files: LoginPage.cs+xaml
-- Folder: Converters
|
-- Files: converterClass.cs
Чтобы использовать IValueConverter
из converterClass.cs
, как я всегда делал, я поставил следующие в заголовке моего XAML файла:
<Page
x:Class="myApp.Login.LoginPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:meinStundenplaner.Login"
xmlns:myConverter="using:myApp.Converters"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Page.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="../Styles/standardStyles.xaml"/>
</ResourceDictionary.MergedDictionaries>
<myConverter:DateTimeConverter x:Key="DateTimeConverter" />
... some more converters
</ResourceDictionary>
</Page.Resources>
...
Теперь это происходит, что если я набираю <myConverter:
, то автозаполнение находит мои классы конвертеров, как обычно, но при компиляции (компиляции) и тестировании на устройстве ни один из преобразователей не работает, а также я получаю сообщение об ошибке в списке ошибок
The name 'DateTimeConverter' in namespace 'using:myApp.Converters' does not exist.
Где я ошибся?
Дважды проверьте, что класс DateTimeConverter находится в пространстве имен myApp.Converters. Возможно, вы перетащили файл в папку, но забыли изменить пространство имен в коде C#. –
Также проверьте, что ваш конвертер фактически называется DateTimeConverter. –
Я смущен. Согласно [this] (http://stackoverflow.com/a/22029082/3538012) (среди других ссылок) для приложения Windows Phone вы должны использовать 'clr-namespace' вместо' use' в своем объявлении пространства имен. Вы действительно пишете приложение Windows Phone? Если да, почему вы не используете 'clr-namespace'? Что произойдет, если вы это сделаете? Меня не удивило бы, если редактор не знает разницы между Windows Phone и Windows RT и поэтому автоматически завершает работу с неправильным объявлением, хотя он не будет успешно скомпилирован. –