Вставить System.String в XAML

Есть ли способ вставить строку в XAML, дать ей и идентификатор и обратиться к ней позже.

Я пробовал:

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

Могу ли я сделать это, если бы я вложил String в другое место в XAML? или внутри элемента без интерфейса? Тогда я просто даю ему атрибут Name?

Ответ 1

Вы должны использовать Window.Resources

Здесь пример страницы, в вашем случае это будет тег 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>

Ответ 2

В теге Application вам необходимо включить следующее:

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

без вышеуказанного кода, Visual Studio будет жаловаться на недостающую ссылку на сборку.

Ответ 3

Наличие ссылки на строку не позволит вам изменить ее позже, так как строки неизменяемы, как предлагает Yacoder, просто поместите ее в раздел <Window.Resources>. Что-то вроде:

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

Если вам нужно изменить значение строки, которая появляется в вашей сетке, вам нужно будет использовать TextBlock или другой элемент управления, свойство содержимого которого можно установить.