【问题标题】:Type conversion in xamlxaml 中的类型转换
【发布时间】:2014-09-11 06:13:02
【问题描述】:

我是 WPF 的新手,我发现关于我认为是一个基本问题的信息数量惊人地稀缺,即在 TextBlock 中使用整数作为文本。这是我在app.xaml 中定义我的资源的方式:

xmlns:sys="clr-namespace:System;assembly=mscorlib"

<Application.Resources>
    <sys:Int32 x:Key="MyResourceName">-1</sys:Int32>
</Application.Resources>

这是正确定义和功能的,因为当我尝试在一个简单的 TextBlock 对象中使用它时,VS 位于:

<TextBlock Name="MyTextboxName" Text="{DynamicResource MyResourceName}" />

问题在于它会生成一个错误,当然,它不能默认将整数转换为字符串。通常,我会在我知道我正在打字之前将其转换,但我不知道如何在 xaml 中转换。我考虑过绑定,但它似乎并没有过多地关注用户定义的变量,而且会更麻烦,所以我看了一下转换器。我也发现很少关于在 xaml 中将整数转换为字符串。如果没有解决方案,我可以简单地制作变量字符串并将它们转换为整数或浮点数,仅用于转换,然后将它们转换回来,但这将是一个主要(和混乱)的痛苦。

编辑:明确地说,我真的在问两个问题:

  1. 是否只能在 Xaml 中进行类型转换?
  2. 是否有用于将一种原始类型转换为另一种的默认转换器?

【问题讨论】:

  • 好的,不如使用 Label 来设置它的Content 属性?您还可以设置其ContentStringFormat 属性。

标签: c# wpf xaml


【解决方案1】:

Framework 中已经有一个将 int 转换为字符串的 TypeConverter,这里的问题是,当您使用 StaticResourceDynamicResource 时,它不会被应用。

您只需绑定到您的资源:

<TextBlock Name="MyTextboxName" Text="{Binding Source={StaticResource MyResourceName}}" />

但您不能使用 DynamicResource。

【讨论】:

  • 这给了我一个关于需要指定路径的错误。如果路径不是 Xaml 元素,我根本找不到任何东西,所以我不知道绑定如何在资源上工作。
  • 绑定不需要路径,直接绑定到Source。来自 MSDN:“要绑定到整个对象,您不需要指定 Path 属性。”
  • 我阅读了有关绑定的更多信息,以了解何时可以使用标记扩展(例如将两个标记扩展结合在一起的方式),现在我明白了。
【解决方案2】:

您需要编写一个转换器并使用它为您转换。然后将其添加为资源。

TypeConverters and XAML

【讨论】:

  • 看起来像 int 到 string 这样的原始转换应该有一个现有的转换器。我决定写一个(存储在一个单独的 .cs 文件中)。 Visual Studio 可以找到该类,但我无法访问其中的任何方法。该类从 IValueConverter 继承和实现。是否有任何我可能遗漏的特殊内容使其对 Xaml “可见”?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 2020-11-17
  • 1970-01-01
相关资源
最近更新 更多