Silverlight 4: «Неверный XAML» с использованием конвертера в DataTemplate - PullRequest
5 голосов
/ 21 сентября 2010

возможно, вы могли бы помочь мне понять, почему я получаю необработанное исключение "Неверный XAML" в конструкторе Visual Studio 2010 при попытке сделать следующее на Page.

У меня есть 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=..., эта ошибка исчезает.

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

РЕДАКТИРОВАТЬ
Кстати: точно такой же код не выдает ошибку в проекте WPF!

Ответы [ 4 ]

7 голосов
/ 16 января 2012

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

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

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

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

1 голос
/ 22 сентября 2010

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

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

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

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

1 голос
/ 21 сентября 2010

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

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

0 голосов
/ 06 февраля 2011

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

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

...