2009-05-18 27 views
42

Mam następujące dwa przyciski w XAML:Jak zdefiniować zmienną w XAML?

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

Jak można zdefiniować „10” będzie zmienna, więc mogę zmienić go w jednym miejscu, coś takiego:

Pseudokod:

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

Odpowiedz

72

Spróbuj tego:

dodać do głowy xamlfile

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

następnie dodać to do zasobu sekcja:

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

Wreszcie, należy grubość na marginesie:

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

Wiele typów systemowych można zdefiniować w ten sposób: int, char, string, DateTime, etc

Uwaga: jesteś rację ... Gdyby zrobić jakieś lepsze testowanie .. zmieniony kod tak, że to powinno działać

+0

hmmm, dodaję 2.35 w Window.Resources i otrzymałem "System: Double nie został znaleziony", dodano "System" jako odniesienie, ale didn ' t help, czego mi brakuje? –

+0

Double nie pojawia się w liście rozwijanej, np. "RegistryHive" i trzy inne, mam odniesienia do System.Core, do czego jeszcze muszę się odwoływać? –

+1

Znalazłem mój problem: Dodałem to xmlns: System = "clr-namespace: Microsoft.Win32; assembly = mscorlib" i powinno to być dodanie: xmlns: System = "clr-namespace: System; assembly = mscorlib" –

0

uznaniu jej jako (possibl statycznym tylko do odczytu lub const) pola w pliku związanym kodzie.

1

Dlaczego nie spróbować dodać wartości jako StaticResource?

Resources.Add("theMargin", 10); 

Następnie można uzyskać tę wartość tak:

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

dodałem Resources.Add (” theMargin ", 50); po InitializeComponent w moim kodzie, ale XAML nie mógł uzyskać do niego dostępu. –

1

trzeba powołać się to przed InitializeComponent lub użyć INotifyPropertyChanged interfejsu potem

1

podobna do odpowiedzi Sorskoot jest, można dodać do zasobu grubości użyć, wyznaczając w ten sposób każdy kierunek margines niezależnie

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

Następnie wystarczy użyć grubości jak margin:

<Button Content="Next" Margin="{StaticResource myMargin}"/> 
Powiązane problemy