在XAML中嵌入System.String

时间:2009-11-30 17:37:25

标签: .net wpf silverlight xaml

有没有办法在XAML中嵌入一个字符串,给它和ID并稍后再引用它。

我试过了:

    <Window x:Class="WpfApp1.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:System="clr-namespace:System;assembly=mscorlib"
        Title="Window1" Height="300" Width="500">
        <Grid>
            <System:String>Test</System:String>
        </Grid>
    </Window>

得到错误:
无法将“String”类型的实例添加到“UIElementCollection”类型的集合中。只允许使用'UIElement'类型的项目。

如果我将字符串嵌套在XAML中的其他位置,我可以这样做吗?或者在非UI元素中?那么我只给它一个Name属性吗?

5 个答案:

答案 0 :(得分:29)

您应该使用Window.Resources

以下是Page的示例,在您的情况下,它将是Window.Resources tag:

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:System="clr-namespace:System;assembly=mscorlib">
  <Page.Resources>
    <System:String x:Key="MyString">Hello</System:String>
  </Page.Resources>
  <Grid>  
    <TextBlock Text="{StaticResource MyString}"></TextBlock>
  </Grid>
</Page>

答案 1 :(得分:4)

在Application标记中,您需要包含以下内容:

xmlns:system="clr-namespace:System;assembly=mscorlib">

没有上面的代码,Visual Studio会抱怨缺少程序集引用。

答案 2 :(得分:2)

我不知道为什么,但是在我的.Net Core 3 WPF应用程序中,我应该使用此xmlns定义而不是“ mscorlib”:

xmlns:system="clr-namespace:System;assembly=System.Runtime"

然后我可以定义:

<system:Double x:Key="FontSizeLarge">24</system:Double>

<system:String x:Key="StringTest">Test</system:String>

答案 3 :(得分:1)

对字符串的引用将不允许您稍后更改它,因为字符串是不可变的,所以正如Yacoder建议的那样,只需将其放在<Window.Resources>部分中。类似的东西:

<Window.Resources>
        <System:String x:Key="TestString">Test</System:String>
</Window.Resources>

如果您需要能够更改网格中显示的字符串的值,您将需要使用TextBlock或其他可以设置Content属性的控件。

答案 4 :(得分:0)

如果您像我一样,并且在XAML文件中的某处键入了多余的多余字符,则可能会收到此错误。幸运的是,我的肩膀上看着GIT,所以“比较未修改”迅速显示了我在某个地方错误键入的字符。希望这可以为您节省一些头发。 :)