2009-05-18 12 views
42

Ho le seguenti due pulsanti in XAML:Come posso definire una variabile in XAML?

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

Come Posso definire "10" per essere una variabile in modo da poter cambiare in un unico luogo, qualcosa di simile:

PSEUDO CODICE:

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

risposta

72

Prova questo:

aggiungere al capo della xamlfile

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

quindi aggiungere questo alla risorsa sezione:

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

Infine, utilizzare uno spessore sul margine:

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

Un sacco di tipi di sistema può essere definita in questo modo: int, char, string, DateTime, ecc

Nota: Sei giusto ... Ho dovuto fare qualche prova meglio .. cambiato in codice in modo che dovrebbe funzionare

+0

hmmm, aggiungo 2.35 in Window.Resources e ottenuto "System: Double non trovato", ha aggiunto "System" come riferimento ma non ha fatto t aiuto, cosa mi manca? –

+0

Il doppio non viene visualizzato nel menu a discesa, solo per es. "RegistryHive" e altri tre, ho riferimenti System.Core, cos'altro devo fare riferimento? –

+1

Ho trovato il mio problema: stavo aggiungendo questo xmlns: System = "clr-namespace: Microsoft.Win32; assembly = mscorlib" e avrei dovuto aggiungere: xmlns: System = "clr-namespace: System; assembly = mscorlib" –

0

dichiareremo come (sola lettura possibl statico o const) campo nel file codebehind.

1

Perché non si tenta di aggiungere il valore come StaticResource?

Resources.Add("theMargin", 10); 

allora si può ottenere quel valore in questo modo:

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

ho aggiunto Resources.Add (" theMargin ", 50); dopo InitializeComponent nel mio codice dietro, ma XAML non poteva accedervi. –

1

è necessario richiamare questo prima InitializeComponent o utilizzare INotifyPropertyChanged interfaccia dopo che

1

simile alla risposta di Sorskoot, è possibile aggiungere una risorsa di spessore da usare, in modo da definire ogni direzione margine indipendentemente

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

Poi basta utilizzare lo spessore come il margine:

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