2012-03-30 14 views
0

Ich bin neu zu WPF. Ich habe folgende XAML-Code:Wie definieren und verwenden Sie eine einfache Ressource in XAML?

</Window> 
     ... 
    <Canvas> 
     <TextBlock Canvas.Left="300" Canvas.Top="300">WORD1</TextBlock> 
     <TextBlock Canvas.Left="350" Canvas.Top="300">WORD2</TextBlock> 
     <TextBlock Canvas.Left="400" Canvas.Top="300">WORD3</TextBlock> 
    </Canvas> 
</Window> 

Ich möchte "300" als Ressource (zB "mytop") definieren und alle Canvas.Top = "300" mit Canvas.Top = "mytop" ersetzen.

Wie kann ich dies in WPF/XAML tun? Ich habe StaticResources und DataTemplates untersucht, konnte aber keinen einfachen Weg finden. Vielen Dank.

+0

Sie auch einen [Style] verwenden könnte (http://msdn.microsoft.com/en-us/library/ms745683.aspx) ... –

Antwort

3

allererst Sie Xmlns zum Fenster

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

hinzufügen müssen und dann Ressource definieren wie diese

<Window.Resources> 
    <System:Double x:Key="theTop">300</System:Double> 
</Window.Resources> 

Und dann können Sie es verwenden:

<Canvas> 
    <TextBlock Canvas.Left="300" Canvas.Top="{StaticResource theTop}">WORD1</TextBlock> 
</Canvas> 
+0

Vielen Dank, sehr geschätzt. Konnte keine Antwort in irgendeinem der verschiedenen WPF-Bücher finden, die ich habe, hat mich verrückt gemacht. – Sabuncu

2

Dies ist ein wenig komplizierter als Sie zuerst denken, weil Sie im Wesentlichen eine "Konstante" des Typs System.Double definieren möchten, um später zu referenzieren.

auf diese Art erhalten Sie die System Namespace von mscorlib.dll in XAML verwenden müssen, so fügen Sie den Anfang der Datei unter den anderen Namespace-Deklarationen diese Zeile:

xmlns:s="clr-namespace:System;assembly=mscorlib" 

Jetzt wir können den XML-Namespace verwenden, um unsere Ressourcen zu definieren:

<Canvas> 
    <Canvas.Resources> 
     <s:Double x:Key="foo">300</s:Double> 
    </Canvas.Resources> 

... und es aus den Textblöcken beziehen:

<TextBlock Canvas.Left="300" Canvas.Top="{StaticResource foo}">WORD1</TextBlock> 
    <TextBlock Canvas.Left="350" Canvas.Top="{StaticResource foo}">WORD2</TextBlock> 
    <TextBlock Canvas.Left="400" Canvas.Top="{StaticResource foo}">WORD3</TextBlock> 
</Canvas> 
+1

DANKE. Ich habe die andere Antwort als Antwort markiert, weil sie im Grunde genommen dieselbe war, aber früher als deine, obwohl deine auch die Abkürzung "s" für System hat. Sie sollten darüber nachdenken, ein Buch über WPF zu schreiben, da Sie die Dinge erklären können. Danke noch einmal. – Sabuncu

+0

Beide Antworten (Ihre und von JleruOHeP) funktionieren, und es war großartig, denn wenn ich die Ressourcendefinition im Visual Studio XAML-Editor ändere, werden alle Wörter gleichzeitig ausgerichtet! Ausgezeichnet. ;-) – Sabuncu

1

In Windows Telefon 8.1, der Typ muss ein Grundtyp der XAML-Sprache sein und kann wie folgt aufgerufen werden:

... 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
... 

<Page.Resources> 
    <x:Double x:Key="theTop">300</System:Double> 
</Page.Resources> 

Siehe hier: https://msdn.microsoft.com/en-us/library/hh771178.aspx

Verwandte Themen