代码之家  ›  专栏  ›  技术社区  ›  Thorsten Dittmar

Silverlight 4:在DataTemplate中使用转换器时:“无效的XAML”

  •  5
  • Thorsten Dittmar  · 技术社区  · 15 年前

    也许您可以帮助我理解为什么在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 回复  |  直到 13 年前
        1
  •  7
  •   jingtao    13 年前

    当我找到一个解决方案的时候,我只是在增加这个问题。

    我的案子的解决办法是: http://forums.silverlight.net/post/618518.aspx

    显然,项目名称或程序集名称中不能有空格字符。哦!

    希望有帮助。

        2
  •  1
  •   Alex Paven    15 年前

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

    另外,因为你说你用转换器输出德国日期…让框架做这类事情不是更容易吗,因为它可能会做得更好?将整个应用程序线程的CultureInfo设置为德语,所有格式设置都将使用该区域性的设置完成;当然,您仍然可能只需要一些国际化的控件…

        3
  •  1
  •   AnthonyWJones    15 年前

    我看不出您的XAML有什么问题,但是我想知道这是否是解析XAML时使用的语言设置的结果。默认情况下,使用 InvariantCulture 但是,似乎Visual Studio中的设计器使用当前区域性解析XAML。因此,有时您在设计时的行为会与在运行时的行为有所不同。

    实际上,如果您在 UserControl 呼叫前 InitializeComponent -

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

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

        4
  •  0
  •   David    14 年前

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

    希望能帮上忙。