2015-03-05 2 views
1

Я разрабатываю приложение 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. 

Где я ошибся?

+0

Дважды проверьте, что класс DateTimeConverter находится в пространстве имен myApp.Converters. Возможно, вы перетащили файл в папку, но забыли изменить пространство имен в коде C#. –

+0

Также проверьте, что ваш конвертер фактически называется DateTimeConverter. –

+1

Я смущен. Согласно [this] (http://stackoverflow.com/a/22029082/3538012) (среди других ссылок) для приложения Windows Phone вы должны использовать 'clr-namespace' вместо' use' в своем объявлении пространства имен. Вы действительно пишете приложение Windows Phone? Если да, почему вы не используете 'clr-namespace'? Что произойдет, если вы это сделаете? Меня не удивило бы, если редактор не знает разницы между Windows Phone и Windows RT и поэтому автоматически завершает работу с неправильным объявлением, хотя он не будет успешно скомпилирован. –

ответ

1

wow ... после использования VS2015 и такая же ошибка сохранилась, я немного поиграл с настройками и т. Д.

Мне все время было любопытно, почему он будет компилироваться и развертываться, даже если это вызвало столько ошибок. Проблема оказалась непоследовательной.

Решение было иначе, чем ожидалось:

Вы должны установить Solution Platforms в x86 вместо ARM (который мне нужно было развернуть на устройстве). К счастью VS2015 имеет этот вариант в удобном ярлыке, что вы не можете сказать о VS2013.

Тем не менее он решил ...

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