Вставить System.String в XAML - PullRequest
       12

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

13 голосов
/ 30 ноября 2009

Есть ли способ встроить строку в 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».

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

Ответы [ 3 ]

29 голосов
/ 30 ноября 2009

Вы должны использовать 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>
4 голосов
/ 09 декабря 2011

В теге приложения необходимо указать следующее:

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

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

1 голос
/ 30 ноября 2009

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

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

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

...