2011-01-16 2 views
10

Ich schreibe eine Phone 7 App und möchte auf konstante Werte in Markup verweisen. Ich glaube, die Art, wie man dies tun soll, ist über x:Static.Wie kann ich die Erweiterung {x: Static ...} für Phone7 Silverlight-Apps verwenden?

Visual Studio behauptet jedoch, dass es keine Kenntnis von x:static hat. Was ist die geheime Soße hier? Ich habe folgendes:

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

    <Image Height="{x:Static App.ImageHeight}" ... /> 
    ... 

Und natürlich:

public partial class App : Application 
{ 
    public const double ImageHeight = 100; 
    ... 

Die Fehlermeldung lautet "Der Typ 'x: Static'. Wurde nicht gefunden, dass Überprüfen ...".

Antwort

17

x:Static ist nur in WPF verfügbar - weder Silverlight für den Browser noch Silverlight für Windows Phone 7 unterstützen diese Markup-Erweiterung.

Die übliche Problemumgehung besteht darin, eine (nicht statische) Klasse mit Eigenschaften zu erstellen, die die gewünschten statischen Eigenschaften einfach umschließen und eine Instanz davon als Ressource erstellen und so dagegen binden.

Beispiel *:

public class StaticSideEnums 
{ 
    public static Side Bid { get { return Side.Bid; } } 
    public static Side Ask { get { return Side.Ask; } } 
} 

In den Ressourcen (app.xaml):

<ResourceDictionary> 
    <local:StaticSideEnums x:Key="StaticSideEnums"/> 
</ResourceDictionary> 

In der XAML, wo es verwendet wird:

<toolkit:ListPicker Name="picker" SelectionChanged="OnSelectionChanged"> 
    <toolkit:ListPickerItem Content="Buy" Tag="{Binding Bid, Source={StaticResource StaticSideEnums}}" /> 
    <toolkit:ListPickerItem Content="Sell" Tag="{Binding Ask, Source={StaticResource StaticSideEnums}}" /> 
</toolkit:ListPicker> 

* Dieses Beispiel aus genommen wird eine Antwort in Using localized strings in a ListPicker populated from Enum

+0

Okay, nun, das scheint eine Menge Arbeit zu sein, um eine Konstante zu haben. Aber okay, wenn es so ist, ist es so. Vielen Dank. –

+2

Für Ihren speziellen Anwendungsfall wäre vielleicht ein Style besser? Dann können Sie die Höhe einmal auf alles einstellen, die Sie wollen, diesen Stil für alle Bildelemente verwenden und die gleiche Stufe "einmal ändern, überall anwenden" erhalten. –

+0

Es ist 'x: Static', mit einem Großbuchstaben" S ". XAML ist case sensitive ... –