2009-11-30 4 views
11

Existe-t-il un moyen d'incorporer une chaîne dans XAML, donnez-la et identifiez-la plus tard.Intégrer un System.String dans XAML

J'ai essayé:

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

Et obtenir l'erreur:
Impossible d'ajouter par exemple de type 'String' à une collection de type 'UIElementCollection'. Seuls les éléments de type 'UIElement' sont autorisés.

Puis-je faire cela si j'ai imbriqué la chaîne ailleurs dans le XAML? ou à l'intérieur d'un élément non UI? Puis-je lui donner un attribut Name?

Répondre

27

Vous devez utiliser Window.Resources

Voici un exemple pour la page, dans votre cas, il sera 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> 
+0

Et aussi longtemps que la chaîne est là, ça ira? – BuddyJoe

+2

Oui. Les dictionnaires 'Resources' peuvent contenir des objets de n'importe quel type, et vous pouvez le référencer en utilisant {{StaticResource}' via son 'x: Key' plus tard. –

+0

Jetez un oeil à l'exemple, j'ai mis à jour ma réponse ... –

1

Avoir une référence à la chaîne ne vous permettra pas de le changer plus tard, depuis les chaînes sont immuables, comme le suggère Yacoder, il suffit de le mettre dans la section <Window.Resources>. Quelque chose comme:

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

Si vous devez être en mesure de modifier la valeur de la chaîne qui apparaît dans votre grille, vous aurez envie d'utiliser un TextBlock ou un autre contrôle dont la propriété contenu peut être réglé.

2

Dans la balise d'application vous devez inclure les éléments suivants:

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

sans le code ci-dessus, Visual Studio se plaindront une référence de montage manquant.

+0

Désolé, ignorez ceci, je vois que vous l'aviez déjà inclus. les messages ci-dessus devraient résoudre votre problème. – FruityMo

+4

Si vous pensez que votre propre réponse n'a pas été utile, vous pouvez la supprimer en utilisant le lien de suppression sous la réponse. –

Questions connexes