在XAML中嵌入System.String

问题描述 投票:16回答:4

是否有一种在XAML中嵌入字符串,提供其ID和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>

并得到错误:无法将类型为“字符串”的实例添加到类型为“ UIElementCollection”的集合中。仅允许使用'UIElement'类型的项目。

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

.net wpf silverlight xaml
4个回答
31
投票
您应使用Window.Resources

这是Page的示例,在您的情况下,它将是Window.Resources标签:

<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>


5
投票
在应用程序标记中,您需要包括以下内容:

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

没有以上代码,Visual Studio将抱怨缺少程序集引用。

1
投票
具有对该字符串的引用将使您以后无法更改它,因为字符串是不可变的,因此正如Yacoder所建议的,只需将其放在<Window.Resources>部分中即可。类似于:

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

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

0
投票
并且,如果您像我一样,并且在XAML文件中的某处键入了多余的多余字符,则会出现此错误。幸运的是,我的肩膀上看着GIT,所以“比较未修改”迅速显示了我在某个地方错误键入的字符。希望这可以为您节省一些头发。 :)
© www.soinside.com 2019 - 2024. All rights reserved.