2009-03-12 29 views
13

'da kodda oluşturulan XAML'deki statik nesneleri kullanarak bunu Silverlight'ta çalışamadım, bu yüzden iki test projesi oluşturdum. Tek bir basit WPF projesi ve tek bir şey yapan basit bir Silverlight projesi: kodda bir genel statik readonly değişkeni ayarlayın ve tamamen çıplak kemikler XAML'de kullanın. WPF'de bir aksama olmadan çalışır. Silverlight, ben şu derleyici uyarısı ve çalışma zamanı hatası alıyorum: tag 'Statik' XML ad 'http://schemas.microsoft.com/winfx/2006/xaml' içinde yokSilverlight

Uyarı 2 ...

ve

Geçersiz özellik özellik Metni için {x: Statik SilverlightApplication3: Page.Test} değeri. [Satır: 7 Konum: 25]

Bunun Silverlight 2'de desteklenmediğini mi varsayıyorum, yoksa gerçekten basit bir şeyi mi özlüyorum?

public partial class Window1 : Window 
{ 
    public static readonly string Test = "test"; 
    public Window1() 
    { 
     InitializeComponent(); 
    } 
} 

<Window x:Class="WpfApplication4.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300" 
     xmlns:WpfApplication4="clr-namespace:WpfApplication4">  
    <Grid> 
     <TextBlock Text="{x:Static WpfApplication4:Window1.Test}" /> 
    </Grid> 
</Window> 

ve burada SL sürümü: Burada her ihtimale karşı her ikisi için tam kod ikincisiyse var maalesef

public partial class Page : UserControl 
    { 
     public static readonly string Test = "test"; 
     public Page() 
     { 
      InitializeComponent(); 
     } 
    } 

<UserControl x:Class="SilverlightApplication3.Page" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:SilverlightApplication3="clr-namespace:SilverlightApplication3" 
    Width="400" Height="300"> 
    <Grid x:Name="LayoutRoot" Background="White"> 
     <TextBlock Text="{x:Static SilverlightApplication3:Page.Test}" /> 
    </Grid> 
</UserControl> 

cevap

5

, statik özelliklere bağlama desteklemez Silverlight gibi görünüyor: What is the {x:Static sdfsdf} equivalent?

+2

Bu berbat. Gerçi bağlantı için teşekkürler. Arama yaptığımda kesin bir şey bulamadım, ancak bağladığınız gönderide yanıtlayan kişi SL – Rich

+2

üzerinde bir yetkindir. WhyTF onları desteklemiyor mu ?! –

6

Ne yazık ki Silverlight'ın işlevsellik açısından birçok sınırı vardır ve bunlardan birini buldunuz. StaticMarkupExpression, SL2 tarafından desteklenmemektedir. Bunu kendiniz de tanımlayamazsınız.

örn. ms adam: http://blogs.msdn.com/edmaia/archive/2008/11/23/animating-objects-visibility-in-silverlight.aspx

hüner

class Helper{ 
    public string Value {get{return Page.Test;}} 

// implement INotifyPropertyChange if you want updates 
} 

Ve sınıf statik olmadığı için daha sonra

<Grid.Resources> 
    <somexmlns:Helper x:Key="Helper"/> 
</Grid.Resources> 

<TextBlock Text="{Binding Value, Source={StaticResource Helper}}"/> 
+0

Basit bir dize ile örneğinizde olduğu gibi harika çalıştı, ancak bir Color nesnesini veya bir XAML (GradientStop Color = "# FAF6) kodunda bir kod yazabildiğim bir dize temsilini kullanmaya çalıştığımda ...), Aşağıdaki hatayı alıyorum: AG_E_PARSER_BAD_PROPERTY_VALUE Sınırlamalar nelerdir? – Rich

+0

Tam sözdizimini kullan Bir dize bir Color nesnesi değil, bu yüzden bir tane atayamazsınız.Ancak tam açılı ayraç sözdizimini kullanırsanız, bir renk * nesnesini * belirtebilirsiniz ve iyi çalışır. Veya, Blend gibi bir jeneratörü kullanın ve kısaltılmış sözdiziminde Renk nesneleri içeren özelliklerin işaretlenme biçimine bakın. –

+0

'public static string Değer {get {return Page.Test;}}' ayrıca çalışır –

3

Aslında sürece Statik özelliklere bağlayabilir gibi bir nesne kullanmak olabilir sınıf. Bu nedenle, Yardımcı sınıfın önceki örneğini kullanarak:

public class Helper 
{ 
    public static string Value{ get {return Page.Test;} } 
} 

XAML aynı kalacak.

+0

Merhaba Sam, 'Page.Test' değeri güncellendiyse ciltlemeyi bildirir mi? –

+0

Hmmm, Çalışmayı başaramıyorum. Ne xaml sözdizimi ekleyebilir misin? –

1

Renklere bağlanma hakkında ikinci bir sorunuz olduğunu fark ettim. Silverlight'ta yapılabileceğini sanmıyorum. Silverlight'ta bağlayıcı hedef için minimum gereksinimin FrameworkElement olduğundan eminim.

+0

Evet ... ve şimdi aylar sonra bakıyorum, eğer bir renk olduğunu düşündüğüm şeylere bağlamak istediğim için bir Renk çünkü bunu bir hex dizesi olarak ilan edebilirim, gerçekten bir fırça nesnesi her şey söylenip bittiğinde. Bu soruyu hangi proje için sorduğumu bile hatırlamıyorum, ama şimdi bunu yapmam gerekirse, bir rengin bir renk veya dize temsili yerine statik bir Brush nesnesini ortaya çıkarırsam bunun işe yarayacağını düşünürdüm. – Rich

-2

Statik bir nesne yalnızca bir kez başlatılacak ve programın sonuna kadar devam edecektir. Bir statik nesne, kapsam dahilinde olmadığında bile durumunu yalnızca kendi yerel kapsamlarında görünür halde tutabilir.

+2

Gerçekte doğru cevabınızın niçin negatif oy kullandığını anlıyorsunuz, C türev dillerindeki statik anahtar kelimeden bahsetmiyoruz, statik olan sınıf özelliklerine işaretleme referanslarını destekleyen StaticExtension sınıfının XAML'deki kullanımından bahsediyoruz cevabınız sizin cevabınızı açıklar. –