如何在 XAML ResourceDictionary 中声明空字符串

发布于 2024-12-01 16:39:51 字数 938 浏览 1 评论 0原文

我有一个包含字符串的 ResourceDictionary

<ResourceDictionary xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:sys="clr-namespace:System;assembly=mscorlib">
    <sys:String x:Key="Foo">Hello world</sys:String>
    ...
</ResourceDictionary>

该字典是主题的一部分,在某些主题中,某些字符串为空:

    <sys:String x:Key="Foo"></sys:String>

问题是在这种情况下,我得到一个 XamlParseException :

无法创建“System.String”类型的对象。创建实例失败, 这可能是由于没有公共默认构造函数造成的 '系统.字符串'

我知道可以使用 在数组资源中声明一个空字符串,但我不'不需要数组...直接使用 x:Static 作为资源返回标记扩展,而不是字符串。将 x:Static 放入 sys:String 元素中会产生与之前相同的错误。

是否可以将空字符串声明为 XAML 资源?如何?

I have a ResourceDictionary that contains strings:

<ResourceDictionary xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:sys="clr-namespace:System;assembly=mscorlib">
    <sys:String x:Key="Foo">Hello world</sys:String>
    ...
</ResourceDictionary>

This dictionary is part of a theme, and in some themes, some of the strings are empty:

    <sys:String x:Key="Foo"></sys:String>

The trouble is that in that case, I get a XamlParseException:

Cannot create object of type 'System.String'. CreateInstance failed,
which can be caused by not having a public default constructor for
'System.String'

I know it is possible to declare an empty string in an array resource, using <x:Static Member="sys:String.Empty" />, but I don't want an array... Using x:Static directly as the resource returns the markup extension, not the string. Putting x:Static in the sys:String element gives the same error as before.

Is it even possible to declare an empty string as an XAML resource? How?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夏雨凉 2024-12-08 16:39:51

使用 x:Static 声明它似乎对我来说效果很好......

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:local="clr-namespace:Test"
            xmlns:sys="clr-namespace:System;assembly=mscorlib">
    <x:Static x:Key="empty" Member="sys:String.Empty" />
</ResourceDictionary>
 cc.Content = (string)FindResource("empty"); //Casts to string without exception

Declaring it using x:Static seems to work just fine for me...

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:local="clr-namespace:Test"
            xmlns:sys="clr-namespace:System;assembly=mscorlib">
    <x:Static x:Key="empty" Member="sys:String.Empty" />
</ResourceDictionary>
 cc.Content = (string)FindResource("empty"); //Casts to string without exception
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文