也许您可以帮助我理解为什么在Page
上尝试执行以下操作时,Visual Studio 2010设计器中出现未处理的异常“无效XAML”。
我有一个名为Converter
的{{1}},它将日期转换为德语日期字符串。转换器工作正常。我已经包含了命名空间并将以下内容添加到页面的资源中:
DateTimeConverter
现在我有一个列表框,我想绑定到一个对象列表。我在代码中进行绑定,但我想定义数据模板。因此,我在我的布局中添加了以下内容:
<navigation:Page.Resources>
<myClasses:DateTimeConverter x:Key="dateTime" />
</navigation:Page.Resources>
当我跑步时这很好用。但是,在代码部分中,数据模板的代码不足,设计人员说“无效的XAML”。当我删除<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项目中抛出错误!
答案 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)
当我将转换器标记为内部时,我遇到了“无效的XAML”错误。将修饰符更改为public,一切都按预期进行。
希望得到这个帮助。