Silverlight 4:在DataTemplate中使用Converter的“无效的XA​​ML”

时间:2010-09-21 10:35:04

标签: silverlight visual-studio-2010 xaml silverlight-4.0 designer

也许您可以帮助我理解为什么在Page上尝试执行以下操作时,Visual Studio 2010设计器中出现未处理的异常“无效XAML”。

我有一个名为Converter的{​​{1}},它将日期转换为德语日期字符串。转换器工作正常。我已经包含了命名空间并将以下内容添加到页面的资源中:

DateTimeConverter

现在我有一个列表框,我想绑定到一个对象列表。我在代码中进行绑定,但我想定义数据模板。因此,我在我的布局中添加了以下内容:

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

当我跑步时这很好用。但是,在代码部分中,数据模板的代码不足,设计人员说“无效的XA​​ML”。当我删除<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> 部分时,此错误消失了。

这是设计师的错误吗?我该怎么办?

修改
顺便说一句:完全相同的代码不会在WPF项目中抛出错误!

4 个答案:

答案 0 :(得分:7)

在我找到解决方案时,只是添加了这个问题。

我的案例的解决方案是:http://forums.silverlight.net/post/618518.aspx

显然,您的项目名称或程序集名称中不能包含空格字符。 D'哦!

希望它有所帮助。

答案 1 :(得分:1)

抱歉,根本无法复制,您是否有一些可能导致奇怪错误的设计时数据?

另外,既然你说你正在使用转换器来输出德国日期......让框架做这种事情会不会更容易,因为它可能会更好吗?将整个应用程序线程的CultureInfo设置为德语,所有格式都将使用该文化的设置完成;当然,你仍然可能只想要一些国际化的控制......

答案 2 :(得分:1)

我看不出你的Xaml有什么问题,但是我想知道这是否是解析Xaml时使用的语言设置的结果。默认情况下,使用InvariantCulture解析Xaml,但看起来Visual Studio中的设计器使用当前文化解析Xaml。因此,有时您可以在设计时获得意外的行为差异,而不是在运行时。

事实上,如果您在调用UserControl之前在InitializeComponent的构造函数中执行此操作: -

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

您可能根本不需要转换器。

答案 3 :(得分:0)

当我将转换器标记为内部时,我遇到了“无效的XA​​ML”错误。将修饰符更改为public,一切都按预期进行。

希望得到这个帮助。