5

Возможно, вы могли бы помочь мне понять, почему я получаю необработанное исключение «Invalid XAML» в дизайнере Visual Studio 2010 при попытке сделать следующее на Page.Silverlight 4: «Invalid XAML» с использованием конвертера в DataTemplate

У меня есть Converter с именем DateTimeConverter, который преобразует дату в немецкую строку даты. Преобразователь работает нормально. Я включил имена и добавил следующее к ресурсам + страницы:

<navigation:Page.Resources> 
    <myClasses:DateTimeConverter x:Key="dateTime" /> 
</navigation:Page.Resources> 

Теперь у меня есть поле со списком, который я хочу, чтобы привязать к списку объектов. Я делаю привязку в коде, но я хотел бы определить шаблон данных. Таким образом, я добавил в свой макет следующее:

<ListBox x:Name="lbConversation" BorderBrush="#00000000"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Border BorderThickness="0" Padding="4"> 
       <StackPanel Orientation="Vertical"> 
        <TextBlock Text="{Binding Message, Mode=OneWay}" /> 
        <TextBlock Text="{Binding TimeStamp, Mode=OneWay, Converter={StaticResource dateTime}}" /> 
       </StackPanel> 
      </Border> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

И это отлично работает, когда я бегу. Однако в разделе кода код для шаблона данных недогружен, а дизайнер говорит «Недопустимый XAML». Когда я удаляю часть Converter=..., эта ошибка исчезнет.

Это ошибка дизайнера? Что я могу сделать?

EDIT
Кстати: Точно такой же код не бросает ошибку в проекте WPF!

+0

Вы создали сборку после определения конвертера в xaml и применения его в DataTemplate? – Jehof

+1

Как я уже сказал в своем вопросе: все хорошо, когда я запускаю приложение, что подразумевает, что я его создал :-) Также: Я принял ответ, прежде чем я прочитал ваш комментарий, - который его решает. –

+0

Для всех, кто приходит от Google: я также обнаружил, что у меня была эта проблема, когда я вытаскивал пространство имен в свой файл XAML, который больше не существовал. –

ответ

7

Просто добавив к этому вопросу, поскольку я нашел решение.

Решение моего случая здесь: http://forums.silverlight.net/post/618518.aspx

Видимо, вы не должны иметь пробел в вашем имени проекта или имени сборки. D'о!

Надеюсь, это поможет.

+0

Я полностью забыл об этом вопросе. Когда я получил ошибки в «нормальном» WPF, я понял, что пробелы в именах сборок вызывают эту проблему. –

+0

У меня нет места ни в одной из моих сборок, и я сталкиваюсь с этой проблемой, есть ли способ отладить конструктор, чтобы найти реальную проблему? – Shimmy

+0

Будьте осторожны, чтобы изменить имя и название проекта (переименовать его) И имя сборки (щелкните правой кнопкой мыши по имени проекта/свойства/сборки). – Aliens

1

Извините, не удается воспроизвести это вообще, есть ли у вас некоторые данные времени разработки, которые могут быть причиной странной ошибки?

Кроме того, поскольку вы сказали, что используете конвертер для вывода немецких дат ... не было бы легче позволить фреймворку делать такие вещи, как это, вероятно, делает их намного лучше? Установите CultureInfo для всего приложения в German, и все форматирование будет выполнено с настройками этой культуры; конечно, все же возможно, что вы хотите, чтобы некоторые элементы управления были интернационализированы ...

+0

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

1

Я не вижу ничего плохого в вашем Xaml, однако мне интересно, является ли это результатом настройки языка, используемого при анализе Xaml. По умолчанию Xaml анализируется с использованием InvariantCulture, однако, похоже, что дизайнер в visual studio анализирует Xaml, используя текущую культуру. Следовательно, временами вы можете получить неожиданные различия в поведении во время разработки, чем во время выполнения.

В самом деле, если вы делаете это в конструкторе UserControl перед вызовом InitializeComponent: -

this.Language = XmlLanguage.GetLanguage(Thread.CurrentThread.CurrentCulture.Name); 

Вам может не понадобиться ваш конвертер вообще.

0

Я столкнулся с ошибкой «Недопустимый XAML», когда у меня был установлен мой конвертер. Измените модификатор на общедоступный, и все будет как ожидается.

Надеюсь, что эта помощь.

+1

Нет, мои конвертеры уже открыты. Спасибо, в любом случае! –

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