2009-05-18 10 views
42

Ich habe die folgenden zwei Schaltflächen in XAML:Wie kann ich eine Variable in XAML definieren?

<Button Content="Previous" 
     Margin="10,0,0,10"/> 
<Button Content="Next" 
     Margin="0,0,10,10"/> 

Wie kann ich "10" definieren eine Variable zu sein, so dass ich es an einer Stelle ändern kann, etwa so:

PSEUDO CODE:

<variable x:key="theMargin"/> 
<Button Content="Previous" 
     Margin="{Variable theMargin},0,0,{Variable theMargin}"/> 
<Button Content="Next" 
     Margin="0,0,{Variable theMargin},{Variable theMargin}"/> 

Antwort

72

Versuchen Sie folgendes:

auf den Kopf des xamlfile hinzufügen

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

diese dann auf die Ressource hinzufügen Abschnitt:

<System:Double x:Key="theMargin">2.35</System:Double> 

Schließlich verwenden, um eine Dicke am Rand:

<Button Content="Next"> 
    <Button.Margin> 
     <Thickness Top="{StaticResource theMargin}" Left="0" Right="0" 
        Bottom ="{StaticResource theMargin}" /> 
    </Button.Margin> 
</Button> 

Viele Systemtypen können auf diese Weise definiert werden: int, char, string, Datetime, etc.

Hinweis: Du bist Recht ... Hatte einige bessere Tests zu tun .. zu Code geändert, so dass es

+0

hmmm, ich füge 2.35 in Window.Resources hinzu und habe "System: Double wurde nicht gefunden", habe "System" als Referenz hinzugefügt, aber didn ' t hilfe, was fehlt mir? –

+0

Double wird nicht in der Dropdown-Liste angezeigt, nur z. "RegistryHive" und drei andere, ich habe Referenzen System.Core, was muss ich noch verweisen? –

+1

Ich habe mein Problem gefunden: Ich habe dieses xmlns: System = "clr-namespace: Microsoft.Win32; assembly = mscorlib" hinzugefügt und sollte Folgendes hinzufügen: xmlns: System = "clr-namespace: System; assembly = mscorlib" –

0

deklarieren es als (possibl statisch nur lesbar oder const) Feld in der Code-Behind-Datei.

1

Warum versuchen Sie nicht, den Wert als StaticResource hinzuzufügen?

Resources.Add("theMargin", 10); 

Dann können Sie diesen Wert wie folgt erhalten:

<Button Content="Previous" 
     Margin="{StaticResource theMargin},0,0,{StaticResource theMargin}"/> 
<Button Content="Next" 
     Margin="0,0,{StaticResource theMargin},{StaticResource theMargin}"/> 
+0

I Resources.Add hinzugefügt (“ theMargin ", 50); nach InitializeComponent in meinem Code hinter, aber XAML konnte nicht darauf zugreifen. –

1

arbeiten sollten Sie dies vor InitializeComponent aufrufen müssen oder verwenden INotifyPropertyChanged Schnittstelle danach

1

Similiar zu Sorskoot Antwort können Sie eine Dicke Ressource hinzufügen, damit Richtung definiert jede Marge verwenden unabhängig

<UserControl.Resources> 
    <Thickness x:Key="myMargin" Top="5" Left="10" Right="10" Bottom ="5"></Thickness> 
</UserControl.Resources> 

Dann benutzen Sie einfach die Stärke als Margin:

<Button Content="Next" Margin="{StaticResource myMargin}"/>